簡體   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