[英]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]中,例如,在所有的打印無關,甚至沒有空間
當您使用cin
和cout
讀寫char*
時,會將其視為C風格的字符串。 cin
在該行的末尾添加了一個空終止符,而cout
只寫直到到達空終止符為止。 strlen()
計算字符,直到終止符為空。
suffix[6]
將包含分配數組時該字節中發生的任何隨機垃圾。 如果您沒有看到cout << suffix[6]
任何內容,那是因為隨機垃圾恰好是一個非打印字符。
帶有char*
右操作數的<<
運算符從流中讀取並將C樣式的字符串寫入指定的數組。 ( char*
值是數組表達式suffix
的隱式轉換的結果。)
它將終止的空字符'\\0'
到數組中以標記字符串的結尾。 '\\0'
之后的數組內容將保留。
strlen
和cout << suffix
都將查找此終止符,以確定字符串的長度。
至於suffix[6]
,它是數組的有效元素,但超出了字符串的末尾。 它的內容是垃圾。 盡管沒有確定,但很有可能包含一個空字符。 打印它可能沒有可見的效果。 如果將其轉換為int
,則可以看到實際值。
cin
在“ dog”之后安裝了null; 結果, cout
停止在“ dog”之后顯示字符。 這是通過c ++方法識別字符串結尾的。
這里沒有指針
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.