C++ strlen() 初始化的字符数组
C++ strlen() initialized char array
快速提问。
我找不到为什么初始化的 char 数组返回此值。我知道strlen()函数只会返回数组内的字符数,而不是大小,但如果其中没有字符,为什么它会返回61?
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const int MAX = 50;
char test[MAX];
int length = strlen(test);
cout << "The current 'character' length of the test array is: " << length << endl;
// returns "61"
// why?
cin >> test; //input == 'nice'
length = strlen(test);
cout << "The new 'character' length of the test array is: " << length << endl;
// returns 4 when 'nice' is entered.
// this I understand.
return 0;
}
这在项目中让我发疯,因为我会尝试使用循环将信息输入字符数组,但 strlen() 总是会返回一个离谱的值,直到我将数组初始化为:
char testArray[50] = '';
而不是
字符测试数组[50];
我使用Visual Studio 2015得到了这些结果
谢谢!
我认为基本的误解是 - 与其他语言不同 - 在 C 中,本地定义的变量不使用任何值初始化,既不使用空字符串,也不使用 0,也不使用任何<undefined>
或其他任何东西,除非您明确初始化它们。
请注意,访问未初始化的变量实际上是"未定义的行为";它可能导致"有趣"和非确定性的结果,可能会崩溃,甚至可能被忽略。
此类程序的一个非常常见的行为(尽管显然不能保证!)是,如果你写
char test[50];
int length = strlen(test);
然后test
将指向一些内存,该内存以50
字节的大小保留,但填充了任意字符,根本不