int main() {
char suffix[25];
cout<<"Enter some suffix: ";
cin >> suffix;
cout << endl <<suffix;
}
请参阅 full sample
输入:
dog
输出:
dog
预期产出:
dog#*(!&!XΓ◘♪<♣@!(!)XΓ◘♪<♣☺XΓ◘♪<♣
我错过了关于指针的基本要素(如果这实际上与指针有关)以及它们能够准确保留给出的内容的能力是什么?即使strlen(后缀)产生3,当我期望它为25.打印后缀[6],例如,什么都不打印,甚至不打印空间
答案 0 :(得分:3)
当您使用char*
和cin
读取或写入cout
时,会将其视为C风格的字符串。 cin
在行的末尾添加一个空终止符,cout
只会写入,直到它到达null终止符。 strlen()
计算字符直到空终止符。
suffix[6]
将包含分配数组时该字节中发生的任何随机垃圾。如果你没有看到cout << suffix[6]
的任何内容,那是因为随机垃圾恰好是非打印字符。
答案 1 :(得分:1)
具有<<
右操作数的char*
运算符从流中读取并将C样式字符串写入指定的数组。 (char*
值是数组表达式suffix
的隐式转换的结果。)
它将终止空字符'\0'
存储到数组中以标记字符串的结尾。 '\0'
之后的数组内容是单独的。
strlen
和cout << suffix
都会查找此终结符以确定字符串的持续时间。
至于suffix[6]
,它是数组的有效元素,但它超出了字符串的结尾。它的内容是垃圾。尽管不是很确定,但它很可能包含一个空字符;打印它可能没有明显的效果。如果将其转换为int
,则可以看到实际值。
答案 2 :(得分:1)
cin
在&#34; dog&#34 ;;之后安装null。结果cout
在&#34; dog&#34;之后停止显示字符。这是通过c ++方法识别字符串的结尾。
这里没有指针