strlen的用法和细节、以及自己模拟实现的strlen。
strlen是对字符串大小求长度,只能用来求字符串的大小,可不能和sizeof混淆哦,strlen是一个函数,sizeof是一个操作符!具体细节,前面有文章讲了。
strlen求字符串的大小的时候,遇到\0就终止,但是\0不算在字符串长度里哦
举个例子:
下面三个是模拟实现的strlen。
assert函数是为了确保指针合法,不是野指针。
```c
#include <stdio.h>
#include <windows.h>
#include<assert.h>
#pragma warning (disable:4996)
//方法一:创建临时变量计数
int My_strlen(char *arr)
{
char *p = arr;
assert(arr!= NULL);
assert(p != NULL);
int size = 0;
while (*p)
{
*p++;
size++;
}
return size;
}
//方法二:用指针相减得到中间元素的个数
int My_strlen2(char *arr)
{
char* q = arr;
assert(arr != NULL);
assert(q != NULL);
while (*q != 0)
{
q++;
}
return q - arr;
}
//方法三:递归方法
int My_strlen3(char *arr)
{
assert(arr != NULL);
if (*arr == 0)
{
return 0;
}
else
{
return 1 + My_strlen3(arr + 1);
}
}
来看看我们模拟实现的运行结果。
另外出一道有趣的题目:涉及数据存储和strlen。
记住两点:
1、strlen遇到\0会停止。
2、strlen的返回值是一个无符号数。
int main()
{
char a[1000] = {
0};
int i=0;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a))