我一直有一个关于 C++/C 中以 null 结尾的字符串的问题。例如,如果您有一个像这样的字符数组:
char a[10];
然后你想读这样的字符:
for(int i = 0; i < 10; i++)
{
cin >> a[i];
}
然后让我们输入以下单词:提问者
作为输入。
现在我的问题是“\0”会发生什么?如果我要反转字符串,并使其打印出来
renoitseuq
空终止符去哪里了?我认为良好的编程习惯是始终为零终止字符留一个额外的字符。但在这个例子中,所有内容都被正确打印,那么为什么要关心空终止字符呢?只是好奇。感谢您的想法!
最佳答案
在某些情况下,您会得到一个空终止符,而在某些情况下,您必须自己请求一个。
const char* x = "bla";
是一个以 null 结尾的 C 风格字符串。它实际上有 4 个字符 - 3 + 空终止符。
您的字符串不是以 null 结尾的。事实上,将其视为空终止字符串会导致未定义的行为。如果你是cout <<
如果是这样,您将尝试读取超出允许访问的内存的内容,因为运行时将继续寻找空终止符并吐出字符,直到达到 1。就你而言,你很幸运最后有一个,但这并不能保证。
char a[10];
就像任何其他数组一样 - 未初始化的值,10 个字符 - 而不是 11 个字符,只是因为它是 char
大批。你不会想到int b[10]
包含 10 个可供您使用的值以及一个额外的 0
最后只是因为,你愿意吗?
嗯,读回来,我不明白为什么你也希望 C 字符串也这么做 - 这并不完全直观。
关于c++ - 关于零终止字符的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790958/