功能详细解释
1. 函数介绍 1. 函数原型
size_t strlen ( const char * str );
2、注意事项
①字符串使用'\0'作为结束标志,函数返回字符串中出现在'\0'之前的字符数(不包括'\0');
例子:
#include
#include
int main()
{
char arr[] = "abcdefg";// "abcdefg\0"
int num = strlen(arr);
printf("%d\n", num);
return 0;
}
输出结果:
②参数指向的字符串必须以'\0'结尾;
例如字符串的定义如下: char arr[]={'a','b','c','d',};
输出结果将是一个随机值,因为不知道 '\0' 在此字符数组中的位置。
③函数的返回值是一个无符号数。
这一项是最容易被忽视的,也是一个容易出错的点。
例子:
int main()
{
const char*str1 = "abcdefg";
const char*str2 = "cdef";
if(strlen(str2)-strlen(str1)>0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
出现这样结果的原因是:str1的长度为7,str2的长度为4,在if判断条件下,str2的长度减去str1的长度为-3,但是str2的返回值类型函数是无符号类型,因此会被转换为大于0的数字,结果将是str2 > str1。
2. 功能模拟实现 1. 计数器方法
int my_strlen(char* str)
{
int count = 0;
while (*str++)
{
count++;
}
return count;
}
2. 递归实现
int my_strlen(char* str)
{
if (*str == '\0')
{
return 0;
}
else
return my_strlen(str+1) + 1;
}
3. 指针-指针实现
int my_strlen(char* str)
{
char* s = str;
while (*s)
{
s++;
}
return s - str;
}