可能重複:
Why don’t I get a segmentation fault when I write beyond the end of an array?爲什麼我不會出現分段錯誤?
我只是用指針玩的時候,我意識到,一些奇怪的事情正在發生。我知道,每當我們要爲一個字符串SRC複製到另一個字符串DST,使用的strcpy,比如,我們應該分配所需的空間SRC。
char *dst,*src = "asdlskafksdhfklshfkshdkfhksdhfçsahdflçsdhfçklshadfç";
dst = (char*)malloc(1); //only one char allocated
strcpy(dst,src);
printf("dst=%s.\n",dst);
此代碼不應執行。但是,這並沒有發生。該代碼執行後,將src成功複製爲dst並打印出dst就像一個魅力。請你解釋一下爲什麼會發生這種情況?
它是未定義的行爲。它可能表現爲做程序員的意圖。或不。 –
@DanielFischer:發明C的科學嚴謹的人從C規範中留下了很多細節,這是不是有點讓人失望? C中有很多「未定義的行爲特徵」! – Razvan
@Razvan:這是非常有意的。 – akappa