2012-12-06 32 views
-2

我聲明瞭一個字符數組:char arr [200]。 隨後我使用函數cin將值讀入arr [200]。 我在命令行窗口中輸入:abcd做cin函數添加null在輸入結束時終止

是否存在空終止符:'\ 0'在輸入結尾自動添加到數組中。 (我不這麼認爲,因爲我使用CIN功能進行了測試:CIN >> ABCD)

有人可以向我解釋爲什麼

下面是我的代碼片段我用它來測試

char arr[200] 
    int count=0; 
    int i=0; 
    cin>>arr // i type into command window:abcd 

    while (arr[i] != '\0') 
    { 
     count++; 
     i++ 




    } 

我的計數值將不會被4但像43因此,我的結論是,該字符數組不爲空的CIN功能

+1

爲什麼不添加'\ 0'? – dutt

+0

你應該看看這裏:http://www.cplusplus.com/forum/articles/6046/ – Najzero

+0

我編輯了這個問題,以便更好地理解 – Computernerd

回答

3
std::istream

格式化輸入到字符陣列將用空字符結束的輸入,按指定在C++ 11 27.7.2.2.3/9:

operator>>然後存儲一個空字節(charT())在下一個位置

您發佈的代碼在出現明顯的語法錯誤後會給出預期的結果。但要小心這是非常危險的;沒有檢查數組的長度,所以太多的輸入會溢出它。我強烈建議您使用std::string類而不是普通字符數組來管理字符串。

您通過link在評論發佈的代碼看起來是這樣的:

char array[20]; 
int length=getlength(array); 
cin>>array; 

讀入陣後試圖測量未初始化數組的字符串長度。這可能會導致任何結果或崩潰,或導致任何其他未定義行爲的示例。未來,您應該確保您在問題中發佈的代碼與展示您所問的行爲的代碼相同;否則,回答這個問題是不可能的。

+0

謝謝,我會記下來 – Computernerd

0

是後終止,則輸入將是零終止。否則,例如,在輸入後不打印隨機字符的情況下,您將無法打印它。

+0

那麼爲什麼我的計數值是43 – Computernerd

+0

@RayLim它不在這裏。你的編譯器壞了。 –

+0

@Lim [適用於我。](http://ideone.com/JVAuNx) –