1.strlen的一般用法
C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
#include<stdio.h>
#include<string.h>
int main()
{
char len[] = {"abcdef"};
printf("%d", strlen(len));//用strlen实现计算字符串长度
return 0;
}
2.自定义一个my_strlen函数来实现strlen的功能
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strlen(const char *str)//传的是a的地址
{
int count=0; //计数器
assert(str != NULL);//断延,指针必须具备有效性,不能为空指针
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char len[] = {"abcdef"};
printf("%d", my_strlen(len));//用strlen实现计算字符串长度
return 0;
}
3.错误示范
错误例题1
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = { 'a','b','c','d','e','f' };
int len = strlen(arr);
printf("%d", len);
return 0;
}
计算出来的是一个随机值,原因是strlen寻找’\n‘,而'\n'在内存中不知道在哪存放;
易错易混淆知识(知识扩展)
#include<stdio.h>
#include<string.h>
int main()
{
if (strlen("abc") - strlen("abcdef") > 0)
printf("hehe");
else
printf("haha");
return 0;
}
运行结果如下
size_t strlen(char* str) //这是c语言规定的strlen函数的返回值
int strlen(char* str) //这是我们写的
区别:
size_t的意思是无符号整数类型,strlen("abc")计算出来的结果是3,strlen("abcdef")计算出来的结果是6, 3-6=-3, 而strlen返回的是一个无符号类型的数,所以-3在内存中的补码放入之后一定是一个大于0的数。
接下来看这样一段代码:
#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strlen(const char* str)//传的是a的地址
{
int count = 0; //计数器
assert(str != NULL);//断延
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
if (my_strlen("abc") - my_strlen("abcdef") > 0)
printf("hehe");
else
printf("haha");
return 0;
}
如果用自己写的my_strlen函数,因为定义的返回值是int,所以输出结果为haha;
总结:
1.字符串以‘\0'作为结束标志,strlen函数返回的是在字符串中’\0'前面出现的字符个数(不包含‘\0'),
2.参数指向的字符串必须要以’\0‘结束
3.注意函数的返回值为size_t,是无符号的(易错)
4.学会strlen函数的模拟实现