#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main() {
char *a = "aaaaaaaaaaaaaaaa";
char b[1];
strcpy(b, a);
printf("%s\n", b);
}
運行時,它打印:當strcpy()導致緩衝區溢出時爲什麼沒有分段錯誤?
aaaaaaaaaaaaaaaa
如果我做*超長,例如,* A = 「aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa」,那麼就會造成一個段錯誤。
爲什麼在第一種情況下沒有溢出?
未定義的行爲。該程序在您的浴室中產生一頭大象完全有效。 – EOF 2015-02-05 19:29:28
C語言中沒有「分段錯誤」這樣的事情。你可以做任何事情,包括跨越其他記憶。當你做這些事時會發生什麼,這就是我們不知道的 - 也許程序會崩潰,也許它會「起作用」,也許它在一臺機器上工作,並在另一臺機器上崩潰等等。這就是所謂的「未定義行爲'。 – PaulMcKenzie 2015-02-05 19:35:43
這是一個多重複制,但不能找到一個副本。 – 2015-02-05 19:49:58