2016-07-28 72 views
1

我試圖理解字符數組與下面的代碼更 困惑字符數組

int main() { 
    char test[] = "hello"; 
    char here[4] = "ola"; 
    char bon[] = { 'w','o','r','d' }; 
    char word[4] = { 'z','f','f','z' }; 

    std::cout << test << std::endl; 
    std::cout << here << std::endl; 
    std::cout << bon << std::endl; 
    std::cout << word << std::endl; 
    return 0; 
} 

輸出

hello 
ola 
wordhello 
zffzwordhello 

爲什麼它給了我這個輸出不

hello 
ola 
word 
zffz 
+0

您在這裏末尾缺少一個''\ 0''字符:'char bon [] = {'w','o',' r','d'} ;.' –

+0

和「word」一樣。 –

+0

如果將字符串傳遞給輸出例程,則該例程不知道該字符串有多長。粗略地說:它繼續打印,直到達到第一個''\ 0''字符。 –

回答

0

問題是null結束符('\0')被隱式添加到fir st兩個語句,但不是在顯式設置數組元素的最後兩個語句中。當您嘗試打印數組時,這會導致未定義的行爲(這意味着輸出可能會有所不同,或者應用程序可能會崩潰,具體取決於編譯器)。 <<操作員需要空終止符,以便知道何時停止打印。您需要添加空終止符,如下所示:

char bon[] = { 'w','o','r','d','\0' }; 
char word[5] = { 'z','f','f','z','\0' }; 
+0

@RudyVelthuis是的,我知道,正如你所看到的,我已經在我的答案的第一句話中說過了。 –

+0

我不是故意要告訴你的。我只是忘記了適當的地理位置。我的意思是這個OP。抱歉。 –