以下代碼段的輸出應該是什麼?爲什麼?這段代碼段的輸出結果是什麼?爲什麼?
#include <stdio.h>
#include <string.h>
int main()
{
char ch = 'A';
char str[3];
strcpy(str, "ABCDE");
printf("%c", ch);
}
以下代碼段的輸出應該是什麼?爲什麼?這段代碼段的輸出結果是什麼?爲什麼?
#include <stdio.h>
#include <string.h>
int main()
{
char ch = 'A';
char str[3];
strcpy(str, "ABCDE");
printf("%c", ch);
}
這個程序的輸出可以是任何東西,因爲你緩衝區溢出str
,並得到了一個未定義的行爲。事實上,該程序可能不會輸出任何內容,可能會崩潰,或者可能會做得更糟。
該片段調用未定義的行爲。結果可以是任何事情,從崩潰到意外輸出。
正如其他人所提到的,這是未定義的行爲,因爲它取決於分配給str
的任何位置的內存的內容。它將從ABCDE
開始,但會隨機轉換爲轉換爲字符或崩潰的隨機字節集合。
輸出未定義。在Linux中,我得到輸出D,因爲我認爲從下到上存儲在堆棧中的數據。所以ch存儲在底部,str存儲在它的上面。現在你用另外兩個字節覆蓋str,這會導致ch變量被破壞,這可能導致顯示D作爲輸出。同樣,這取決於您正在運行的編譯器和操作系統。
[鼻惡魔](http://www.catb.org/jargon/html/N/nasal-demons.html),當然。 – dmckee 2011-03-04 05:06:23
這是以前幾個問題的重複,但找到它們可能會很棘手。 – dmckee 2011-03-04 05:08:46
誰寫了這段代碼片段,爲什麼? – Blastfurnace 2011-03-04 06:03:49