1、对于strlen这个库函数来说,主要就是求字符串的长度的,无论何时,只要遇到‘\0’,求得的长度都会戛然而止,可以看一下例子
#include<stdio.h>
#include<string.h>
int main(){char* str1[]="abcdef";char* str2[]="abcdef\0gh";int len1 = strlen(str1);int len2 = strlen(str2);printf("%d %d",str1,str2);return 0;
}
上面这个代码块遇到‘\0’就会停止,无论是str1还是str2求得的长度都为6,这两个的结果是一样的
2、在查阅得到的strlen的库函数中,库函数的范围类型为size_t
(无符号的整形)
根据这个性质,看下面一段代码
#include<stdio.h>
#include<string.h>
int main(){char* str1[]="abcdef";char* str2[]="abcdefgh";if(strlen(str1)-strlen(str2)>0)printf(">");elseprintf("<");return 0;
}
看见这一段代码,这会输出哪个符号呢?正确的答案是“>”,因为strlen这个库函数返回的是无符号的整形,两个无符号数相减肯定得到的是无符号的整数,得到的数永远是大于0的数
3、模拟实现strlen函数
#include<stdio.h>
#include<assert.h>
#include<string.h>
size_t my_strlen(const char* str){assert(str);const char* start=str;const char* end=str;while(*end){end++;}return end-start;
}
int main(){char str[]="abcdef";printf("%d",my_strlen(str));return 0;
}
完整的模拟实现就到这里啦