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;
}