我有一個結構的設置是這樣的:溢出來改變下一個元素在結構中使用C
typedef struct _aStruct
{
char aChar[32];
int target;
}
什麼樣的價值將使這個溢出aChar
,以改變「目標」?
memset(aStruct.aChar,0,32)
對不起,如果這個問題有根本的缺陷,我是新來的。
我有一個結構的設置是這樣的:溢出來改變下一個元素在結構中使用C
typedef struct _aStruct
{
char aChar[32];
int target;
}
什麼樣的價值將使這個溢出aChar
,以改變「目標」?
memset(aStruct.aChar,0,32)
對不起,如果這個問題有根本的缺陷,我是新來的。
我認爲問題來自語法,也許你做了一個指針,不要像指針一樣使用它。
您的typedef沒有一個名字,你必須使它像以下:
typedef struct _aStruct
{
char aChar[32];
int target;
} typedef_name;
你要聲明一個變量是這樣的:
typedef_name structVar;
而且使用它像這樣:
memset(structVar.aChar, 0, 32);
您還可以聲明它爲指針,如下所示:
typedef_name *structVar;
而且使用這樣的:
memset(structVar->aChar, 0, 32);
感謝您的幫助,讓我們假設代碼正常工作。我想知道的是在編譯時,是否有輸入到memset中的值會改變其他數據? – user314464
如果您嘗試寫入的內存未分配(或不存在靜態),則會出現分段錯誤。這取決於你想要你的memset做什麼。在這裏,你只需要32次'0'寫入你的32位陣列,所以它應該可以工作。 – tfontain
它不會取代或改變你的結構中的其他東西。這不是一個工會。 – tfontain
的一個大問題是,在structs
填充是實現定義的。在一個編譯器上工作會導致段錯誤或另一個編譯器損壞。所有可以說的是,一個32或更少的值將永遠不會溢出,並且值爲32 + sizeof(int)
或更少將不會損壞其他內存,即使它確實溢出。
用一個更大的數字33替換32 .. 36.任何更大的,你會做出損壞的東西超出結構。 –