我已經讀了有點類似的問題(why this code works in C),但它實際上並沒有得到解釋,爲什麼是這一段代碼實際工作:爲什麼此代碼實際工作?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct example
{
char length[2];
} STRUCT;
int main (void)
{
STRUCT test;
strcpy(test.length, "********");
puts(test.length);
return 0;
}
我使用的代碼塊編譯它,所以我猜測它是在我的字符串中分配更多空間來默認存儲額外的星號......我真的不知道。也許我很幸運,但每次運行它都可以。
在上面的示例(鏈接)中,他將2個元素放在2的數組中,這裏我使用的空間比字符串可以處理的要多得多,或者可以。
HTTP://en.wikipedia。org/wiki/Buffer_overflow,是的,你很幸運。在你分配的界限之外寫入的內容是未定義的行爲,並且可能導致從絕對沒有一直到崩潰操作系統的任何問題(或者可能更糟) –
程序展示[*未定義的行爲*](http:// en.wikipedia.org/wiki/Undefined_behavior)並且不合格。這只是運氣,它運行,運氣和[鼻惡魔](http://www.catb.org/jargon/html/N/nasal-demons.html)。 –
歡迎來到未定義行爲的世界。這是最糟糕的一種未定義的行爲 - 代碼起作用。它將工作多年,直到真正令人討厭的事情發生。有時會以CNN或slashdot結尾 – pm100