目录
1. strlen----求字符串长度
1.1 函数介绍
- 注意:要引头文件<string.h>
- 字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
- 参数指向的字符串必须要以 ‘\0’ 结束。
- 注意:函数的返回值为size_t,是无符号的( 易错 )
1.2 函数使用
正确使用:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdef";
int len = strlen(arr);
printf("%d\n", len);
return 0;
}
错误使用1:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = {
'a','b','c','d'};
int len = strlen(arr);
printf("%d\n", len);
return 0;
}
注意:像这样初始化,arr数组里没有’\0’,在计算时不知道在哪里结束,输出结果会是随机值。
错误使用2:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abc";
char arr2[] = "abcdef";
if (strlen(arr1) - strlen(arr2) > 0)
printf(">\n");
else
printf("<\n");
return 0;
}
注意:这个代码的输出结果是>。这是因为strlen返回的是无符号整型,-3转换成无符号整型是一个非常大的数字,所以必定大于零。
1.3 模拟实现
方式1:
#include <stdio.h>
//使用计数器
size_t my_strlen(char* str)
{
assert(str);
size_t count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%zu\n", n);
return 0;
}
方式2:
//使用递归
int my_strlen(const char * str)
{
assert(str);
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
方式3:
//使用指针-指针的⽅式
int my_strlen(char *s)
{
assert(str);
char *p = s;
while(*p != ‘\0’ ) p++;
return p-s;
}