1.strncpy函数实现
strncpy是在strcpy函数的基础上,把a中一串字符的任意个字符,拷入字符串数组b中,要拷贝的字符由自己控制,而不是将a中的字符都拷入b中,所以传参时多传一个你要拷贝的字节个数,而且在拷贝完成之后,如果你没有指定字符数组b的大小,记得在数组b中加入'\0'做结尾。
#include<stdio.h> #include<stdlib.h> char* My_strncpy(const char*a, char* b, size_t sz) { size_t i = 0; for(i = 0; i < sz; i++)//拷贝n个字符 { *(b+i) = *(a+i); } *(b+i) = '\0'; return b; } int main() { char a[] = "asdfdgddh"; char b[] = {0}; char *p = My_strncpy(a, b, 3*sizeof(a[0])); printf("%s", p); system("pause"); return 0; }
2.strncat函数实现
strncat函数的功能是在一个字符串的后面追加另一个字符串中前n个字符,n的大小由自己控制,首先要找到字符数组a中末尾'\0'的位置,然后在这个位置开始,进行n次循环把b中的前n个字符追加到a中,重要的是不要忘记最后追加完之后还要加'\0'表示结束,不然你也不知道它什么时候会结束。
#include<stdlib.h> #include<stdio.h> #include<assert.h> char *My_strncat(char *n_a, const char *n_b, size_t sz) { assert(n_a); assert(n_b); char *c = n_a; while(*n_a != '\0')//找到‘\0’的位置 { n_a++; } while(sz--)//向后追加字符 { *n_a++ = *n_b++; } *n_a = '\0';//最后结束时加'\0' return c; } int main() { char a[] = "asdfghjk"; char b[] = "ZXCFGHJ"; char* p = My_strncat(a, b, 3*sizeof(a[0])); printf("%s", p); system("pause"); return 0; }
3.strncmp函数实现
strncmp函数的功能是比较字符数组a和字符数组b中前n个字符的大小,如果a中的前n个字符大的话返回1,如果a中的前n个字符小的话返回,-1,等于时返回0。
#include<stdio.h> #include<stdlib.h> #include<assert.h> int My_strncmp(const char* a,const char* b, size_t sz) { size_t i = 0; assert(a); assert(b); while(i < sz && *a && *b) { if(*a > *b)//大于时 return 1; else if(*a < *b)//小于时 return -1; a++; b++; i++; } return 0;//等于时 } int main() { char a[] = "sdfghj"; char b[] = "sdfyu"; if(My_strncmp(a, b, 3*sizeof(a[0])) > 0) { printf("大于\n"); } else if(My_strncmp(a, b, 3*sizeof(a[0]) < 0) { printf("小于\n"); } else { printf("等于\n"); } system("pause"); return 0; }