2017-04-06 48 views
0

我有一個結構的設置是這樣的:溢出來改變下一個元素在結構中使用C

typedef struct _aStruct 
{ 
char aChar[32]; 
int target; 
} 

什麼樣的價值將使這個溢出aChar,以改變「目標」?

memset(aStruct.aChar,0,32) 

對不起,如果這個問題有根本的缺陷,我是新來的。

+1

用一個更大的數字33替換32 .. 36.任何更大的,你會做出損壞的東西超出結構。 –

回答

0

我認爲問題來自語法,也許你做了一個指針,不要像指針一樣使用它。

您的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); 
+0

感謝您的幫助,讓我們假設代碼正常工作。我想知道的是在編譯時,是否有輸入到memset中的值會改變其他數據? – user314464

+0

如果您嘗試寫入的內存未分配(或不存在靜態),則會出現分段錯誤。這取決於你想要你的memset做什麼。在這裏,你只需要32次'0'寫入你的32位陣列,所以它應該可以工作。 – tfontain

+0

它不會取代或改變你的結構中的其他東西。這不是一個工會。 – tfontain

1

的一個大問題是,在structs填充是實現定義的。在一個編譯器上工作會導致段錯誤或另一個編譯器損壞。所有可以說的是,一個32或更少的值將永遠不會溢出,並且值爲32 + sizeof(int)或更少將不會損壞其他內存,即使它確實溢出。