我有这个代码:
int main()
{
char ch[15];
cout<<strlen(ch)<<endl; //7
cout<<sizeof(ch)<<endl; //15
return 0;
}
Run Code Online (Sandbox Code Playgroud)
strlen(ch)即使它是空char数组,为什么会给出不同的结果?
您的代码具有未定义的行为,因为您正在读取数组的未初始化值strlen.如果您想要确定结果,则strlen必须初始化(或分配)您的数组.
例如
char ch[15] = "Hello, world!";
Run Code Online (Sandbox Code Playgroud)
要么
char ch[15] = {};
Run Code Online (Sandbox Code Playgroud)
sizeof将给出其操作数的大小,因为大小char是一个定义,a的大小char[15]将始终为15.
strlen给出一个以null结尾的字符串的长度,该字符串是给定数组中第一个char带有值的偏移量.要使调用有效,参数必须实际指向空终止字符串.0charstrlen
ch是局部变量,局部变量未初始化.所以你假设它是一个空字符串是不正确的.它充满了垃圾.这只是一个共同发生的事件,\0在7个垃圾字符之后找到了一个角色,因此strlen返回7.
你可以这样做以确保空字符串 -
char ch[15]={0};
ch[0]='\0`;
strcpy(ch,"");
Run Code Online (Sandbox Code Playgroud)
这是一个类似的线程,以便更多阅读