我注意到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终止符是隐式的。