我注意到C++中存在怪异的差异。

说我有这段代码:

const char myChars[] = "12345";
std::cout << myChars;

输出为:12345

但是,如果我将其更改为:
const char myChars[] = {'1','2','3','4','5'};
std::cout << myChars;

然后输出为:12345__SOME_RANDOM_DATA_IN_MEMORY__

为什么cout似乎知道第一个版本的长度而不知道第二个版本的长度?另外,cout甚至不知道长度吗?

谢谢。

最佳答案

第二个示例中没有空终止符。

const char myChars[] = {'1','2','3','4','5', 0};

会很好的。

字符串文字需要一个空终止符来表示字符串的结尾。

有关更多详细信息,请参见以下stackoverflow答案:https://stackoverflow.com/a/2037245/507793

对于第一个示例,当您使用诸如"Hello"之类的引号创建字符串文字时,它大致等效于{'H', 'e', 'l', 'l', 'o', 0},因为使用引号时null终止符是隐式的。

10-07 19:52