c语言简单的问题,高手帮一下。
#include<stdio.h>
#include<string.h>
void main()
{
char a1[]={'a','b','c','d'};
printf("%d",strlen(a1));
}
结果为什么7?
[解决办法]
这个没结束符哦,碰到有0才停下,结果其实是不能预知的
[解决办法]
strlen是找到'\0'位置,所以结果不确定。可能是4也可能是别的数字
[解决办法]
strlen()函数处理的字符串是以'\0'结束的,但是你定义的字符串中没有'\0'结束符。所以这个返回值7是一个随机值,是在第七个字符的后面是一个'\0'字符;你下次运行,或者在其他地方运行结果可能就不是7了。
你可以把a1[]修改一下:char a1[]={'a','b','c','d', '\0'};你在运行一下应该就是4了。
所以,以后对字符串的处理多注意下'\0'。
[解决办法]
这个结果是不确定的,a1是一个字符数组,不是字符串,strlen获取字符串的长度,他遇到字符串结束符“\0”就会返回,如果要想将a1看做是一个字符串,应该在添加一个元素"\0",如char a1[]={'a','b','c','d','\0'};则此时strlen(a1)的返回值为4,但是数组的实际大小是5
[解决办法]
因为a1没有结束符,所以你用strlen求长度是错误的,应该用sizeof
[解决办法]
- C/C++ code
#include<stdio.h>#include<string.h>void main(){char a1[]={'a','b','c','d','\0’};printf("%d",strlen(a1));}
[解决办法]
受教了,楼上的都说的很清楚!
[解决办法]
- C/C++ code
size_t __cdecl strlen ( const char * str ){ const char *eos = str; while( *eos++ ) ; return( eos - str - 1 );}
[解决办法]
strlen改为sizeof
[解决办法]
把strlen 改为 sizeof,或者把数组后面加一个'\0'
[解决办法]
如果想求字符数组的大小使用strlen(),必须是以'\0'结尾的,求数组的大小可以使用sizeof