2011-03-04 260 views
1

以下代碼段的輸出應該是什麼?爲什麼?這段代碼段的輸出結果是什麼?爲什麼?

 #include <stdio.h> 
    #include <string.h> 
    int main() 
    { 
     char ch = 'A'; 
     char str[3]; 
     strcpy(str, "ABCDE"); 
     printf("%c", ch); 
     } 
+5

[鼻惡魔](http://www.catb.org/jargon/html/N/nasal-demons.html),當然。 – dmckee 2011-03-04 05:06:23

+0

這是以前幾個問題的重複,但找​​到它們可能會很棘手。 – dmckee 2011-03-04 05:08:46

+0

誰寫了這段代碼片段,爲什麼? – Blastfurnace 2011-03-04 06:03:49

回答

8

這個程序的輸出可以是任何東西,因爲你緩衝區溢出str,並得到了一個未定義的行爲。事實上,該程序可能不會輸出任何內容,可能會崩潰,或者可能會做得更糟。

1

該片段調用未定義的行爲。結果可以是任何事情,從崩潰到意外輸出。

1

正如其他人所提到的,這是未定義的行爲,因爲它取決於分配給str的任何位置的內存的內容。它將從ABCDE開始,但會隨機轉換爲轉換爲字符或崩潰的隨機字節集合。

0

輸出未定義。在Linux中,我得到輸出D,因爲我認爲從下到上存儲在堆棧中的數據。所以ch存儲在底部,str存儲在它的上面。現在你用另外兩個字節覆蓋str,這會導致ch變量被破壞,這可能導致顯示D作爲輸出。同樣,這取決於您正在運行的編譯器和操作系統。

相關問題