strlen
size_t strlen ( const char * str );
1.字符串已经’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’\0’ )
2.参数指向的字符串必须要以’\0’结束。
3.注意函数的返回值为size_t,是无符号的(易错)
4.学会strlen函数的模拟实现
注意无符号的例子:
int main (){if (strlen ( "abc" ) - strlen ( "abcdef") >0){printf (">\n" );}else{printf ("<=\n" );}return 0;}
代码运行结果是:>
解释:因为strlen函数返回的是无符号整型,3 - 6 = -3,当-3在内存中以补码形式保存时,编译器会将其看成无符号的,是个正数,正数补码即原码,所以会是一个大于0的超大数
(如果自己实现的my_strlen函数返回值是int,则上面判断是<=,各有取舍)
自己实现函数
1.计数器版本
int my_strlen(const char *str){assert(str);int count = 0;while (*str != '\0'){count++;str++;}return count;}
2.递归版本
int my_strlen(const char* str){assert(str);while(*str != '\0'){return 1+my_strlen(++str);//或者str+1}return 0;}
3.指针-指针版本
int my_strlen(const char* str){assert(str);char* start = str;while(*start != '\0'){start++;}return start - str;}