我有这样的代码:
int main()
{
char ch[15];
cout<<strlen(ch)<<endl; //7
cout<<sizeof(ch)<<endl; //15
return 0;
}为什么即使是空的char数组,strlen(ch)也会给出不同的结果?
发布于 2012-08-13 16:12:59
ch是一个局部变量,并且局部变量未初始化。所以你认为它是空字符串的假设是不正确的。里面装满了垃圾。在7个垃圾字符之后发现一个\0字符,因此strlen返回7,这只是一种巧合。
你可以这样做来确保一个空的字符串-
char ch[15]={0};
ch[0]='\0`;
strcpy(ch,"");这里有一个类似的帖子,可以阅读更多内容
发布于 2012-08-13 16:13:47
您的代码具有未定义的行为,因为您正在使用strlen读取数组的未初始化值。如果你想从strlen得到一个确定的结果,你必须初始化(或赋值)你的数组。
例如。
char ch[15] = "Hello, world!";或
char ch[15] = {};sizeof将给出其操作数的大小,因为char的大小是1,根据定义,char[15]的大小将始终是15。
strlen给出了以null结尾的字符串的长度,它是给定char数组中第一个值为0的char的偏移量。要使对strlen的调用有效,的参数必须实际指向以null结尾的字符串。
发布于 2012-08-13 16:13:05
问题出在
strlen(ch);strlen计算字符的数量,直到命中\0符号。在这里,ch是未初始化的,因此strlen可以返回任何内容。
https://stackoverflow.com/questions/11930366
复制相似问题