我已经学习 C++ 两周了。请告诉我,按照我的逻辑,当在 cin 运算符中输入一个字符串常量(例如“animal”)时,该常量被放置在一个数组中,并且自然地,自动字符 \0 也被放置。但是,在执行循环时,cout 仍然显示整个字符串(按相反顺序逐个字符),但我在 i 变量中明确指定了它(没有添加 -1),因此它显示的第一个字符是 \0 字符。 。数组索引对应于[6],我的话,考虑到数组索引从[0]开始,存储在单元格0到单元格5之间。即6中会有一个零字符,那么为什么cout对象无论如何都会输出整个单词,因为对于它来说,零意味着停止。
int main()
{
cout << "Enter a word:";
char word[ArSize];
cin >> word;
for (int i = strlen(word); i >= 0; i--)
cout << word[i];
首先,我将回答点击诱饵标题,因为我上当了。
不,对象
std::cout在任何时候都不会忽略空字符。他正常地拿出来。空.cpp:
它的工作原理是这样的:
好像很明显,无论是在发出
char还是在发出 时,通常都会发出空字符std::string。而且,在 C++ 中,一切都适用于所有其他类型的 C++ 字符串:
std::wstring、std::u32string、std::u16stringandstd::u8string(当使用std::wcout或其他方法时)。另一件事是,对于 C 字符串,“\0”字符是分隔符。因此,在引入 C++ 字符串文字的 C++14 之前,处理空字符有些困难。
至于您的代码,它也正常输出空字符:
您可以看到,对于输入“WORLD”,它输出空字符和“DLROW”。
因为根据 C 字符串的定义,始终为 true
s[strlen(s)] == '\0'(字符 '\0' 不是 C 字符串的一部分)。'\0'仅当 时停止打印一行char*。如果您在一个字符下打印字符(键入char),则将打印所有字符。该字符'\0'被打印为空格。不是一个空间,而是一个空的空间。它在屏幕上不可见。似乎没有零:
但他是。打印了四个字符,
wc他数了一下并od看到了它们,其中包括零: