strlen()计算的是字符串的长度的,引用的头文件是#include<string.h>
size_t strlen ( const char * str );
1.size_t说明strlen()返回的类型是无符号整形,当直接作为表达式运算时,我们得注意
例如:
1. #include<stdio.h> 2. #include<string.h> 3. int main() 4. { 5. char arr[]="abcd"; 6. char brr[]="abcdef"; 7. if(strlen(arr)-strlen(brr)>0) 8. { 9. printf(">\n"); 10. } 11. else 12. { 13. printf("<=\n"); 14. } 15. return 0; 16. }
如果不提前告诉大家,大家一定认为输出的是“<=”,arr数组的长度是4,brr数组长度是6,4-6=-2,所以输出的不就是“<=”吗?然而事实是这样的,由于strlen()返回的是无符号整形,所以strlen(arr)-strlen(brr)是不会等于-2,而是将-2的补码符号位解析成无符号,所以会得到一个很大的正数,最输出的“>”.
2.strlen()工作原理,就是给strlen()一个地址,它就返回字符串中字符的个数,前提是字符串中包含'\0',否者求不出字符串长度,会随机返回一个值。
例如:
1. #include<stdio.h> 2. #include<string.h> 3. int main() 4. { 5. char arr[]="abc"; 6. char brr[]={'a','b','c'}; 7. int ret=strlen(brr); 8. int len=strlen(arr); 9. printf("brr的长度%d\n",ret); 10. printf("arr的长度%d\n",len); 11. return 0; 12. }
运行结果看出,arr的长度的确是3,brr的长度却不是6,这是因为arr的字符串末尾带有\0,brr却没有带有\0,strlen函数会一直执行直到找到\0停止,这里可以看出来,brr执行strlen函数时,在第七个位置找到\0,然后停止执行。
3.自己实现一个strlen()
1. #include<stdio.h> 2. #include<string.h> 3. #include<assert.h> 4. int my_strlen(char* str)//计数器版本 5. { 6. assert(str);//断言,保证str有效 7. int count=0;//计数器 8. while(*str!='\0') 9. { 10. if(*str!='\0') 11. { 12. count++; 13. str++; 14. } 15. } 16. return count; 17. } 18. int main() 19. { 20. char crr[]="abc"; 21. int len_crr=my_strlen(crr);//模拟实现strlen() 22. printf("crr的长度%d\n",len_crr); 23. return 0; 24. }
运行结果