经常听身边的朋友说去参加公司笔试时会遇到要求实现c语言中的库函数(strlen strcpy strncpy strcat strncat strcmp strncmp),有时会想不起来该如何写,那么我们今天就来实现下这几个库函数。( 如有错误,欢迎指出!!!)
1.strlen(字符串长度)
1 size_t mystrlen(const char *str){
2 if(str==NULL){
//也可以使用assert assert(str!=NULL);但需要加assert.h头文件
3 return -1;
4 }
5 size_t cnt = 0;
6 while(*str!='\0'){
7 cnt++;
8 str++;
9 }
10 return cnt;
11 }
12
13
14 int main(){
15 char s[100] = "abcdefg";
16 printf("库函数:%u\n",strlen(s));
17 printf("自定义函数:%u\n",mystrlen(s));
18 return 0;
19 }
调用库函数与自定义函数比较,结果相同(注意:strlen所统计的字符串长度不包括结尾 的’\0’!)。
2.strcpy和strncpy
strcpy是将第二个字符串全部拷贝到第一个字符串中,如果第二个字符串长度小于第一个,则只第一个多出的部分不再显示。strncpy有三个参数,将第二个字符串的n位拷贝到第一个字符串。
char *mystrcpy(char *str_1,const char *str_2)
char *mystrncpy(char *str_1,const char *str_2,size_t n)
strcpy:
15 char *mystrcpy(char *str_1,const char *str_2){
16 if(str_1==NULL||str_2==NULL){
17 return NULL;
18 }
19 char *pstr_1 = str_1;//后面程序会使指针偏移,所以先保存初始位置
20 while(*str_2!='\0'){
21 *str_1 = *str_2;;
22 str_1++;
23 str_2++;
24 }
25 *str_1 = '\0';
26 return pstr_1;
27 }
28
29 int main(){
30 char s1[100] = "hello world";
31 char s2[100] = "hello java";
32 printf("库函数:%s\n",strcpy(s1,s2));
33 char s3[100] = "hello world";
34 char s4