C++ strlen(ch)和sizeof(ch)strlen

tor*_*eff 0 c c++

我有这个代码:

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数组,为什么会给出不同的结果?

CB *_*ley 6

您的代码具有未定义的行为,因为您正在读取数组的未初始化值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


Pav*_*ath 5

ch是局部变量,局部变量未初始化.所以你假设它是一个空字符串是不正确的.它充满了垃圾.这只是一个共同发生的事件,\0在7个垃圾字符之后找到了一个角色,因此strlen返回7.

你可以这样做以确保空字符串 -

char ch[15]={0};
ch[0]='\0`;
strcpy(ch,"");
Run Code Online (Sandbox Code Playgroud)

这是一个类似的线程,以便更多阅读

C++中的变量初始化