为什么 char[] 数组 '\0' 以 std::cin 结尾?

Why is a char[] array '' terminated by std::cin?

本文关键字:char cin 结尾 std 为什么 数组      更新时间:2023-10-16
int main() {
    char suffix[25];
    cout<<"Enter some suffix: ";
    cin >> suffix;
    cout << endl <<suffix;
}

查看完整示例

输入:

dog

输出:

dog

预期输出:

dog#*(!&!XΓ◘♪<♣@!(!)XΓ◘♪<♣☺XΓ◘♪<♣

关于指针(如果这确实与指针有关)以及它们保留给定内容的能力,我缺少的基本内容是什么?即使是 strlen(后缀)也会产生 3,而我预计它是 25。例如,打印后缀[6],什么都不打印,甚至不打印空格

当你读或写一个带有cincoutchar*时,它会将其视为C风格的字符串。 cin在行尾添加一个空终止符,并且cout只写入,直到它到达空终止符。 strlen()计算字符数,直到空终止符。

suffix[6]将包含分配数组时恰好在该字节中的任何随机垃圾。如果您没有看到任何带有cout << suffix[6]的内容,那是因为随机垃圾恰好是非打印字符。

cin

"dog"之后安装一个null;因此cout停止在"dog"之后显示字符。这是通过 c++ 方法识别字符串结尾。

这里没有什么指示

具有char*右操作数的 << 运算符从流中读取并将 C 样式字符串写入指定的数组。(char*值是数组表达式 suffix 的隐式转换的结果。

它将终止空字符''存储到数组中以标记字符串的末尾。''之后数组的内容将保留。

strlencout << suffix 都查找此终止符来确定字符串的长度。

至于suffix[6],这是数组的有效元素,但它超出了字符串的末尾。它的内容是垃圾。它很可能(尽管不确定)包含空字符;打印它可能不会有明显的效果。如果将其转换为int,则可以看到实际值。