繁体   English   中英

为什么char []数组'\\ 0'被std :: cin终止?

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

int main() {
    char suffix[25];
    cout<<"Enter some suffix: ";
    cin >> suffix;
    cout << endl <<suffix;
}

查看完整样本

输入:

dog

输出:

dog

预期输出:

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

我缺少的关于指针的基本要点是什么(如果实际上确实与指针有关)以及它们完全保留给出的内容的能力? 甚至一个strlen的(后缀)产生3,当我希望它是25打印后缀[6]中,例如,在所有的打印无关,甚至没有空间

当您使用cincout读写char*时,会将其视为C风格的字符串。 cin在该行的末尾添加了一个空终止符,而cout只写直到到达空终止符为止。 strlen()计算字符,直到终止符为空。

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

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

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

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

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

cin在“ dog”之后安装了null; 结果, cout停止在“ dog”之后显示字符。 这是通过c ++方法识别字符串结尾的。

这里没有指针

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM