2016-06-07 78 views
-1

我建立一個遊戲,當我使用下面的代碼值分配給結構用C

char example[100]; 
strcpy(example, " "); 
strcat(example, player1->unitName[j]); 
strcat(example, " "); 
map->map[x][y] = example; 

我把用例中的地圖改變了整個價值觀改變的2D地圖的價值。

我想我把指針指向這個例子。

有沒有什麼辦法可以把例子的值不是地址或指針?

+0

分配緩衝區並將內容複製到它。如果可用,'strdup()'將很方便。 – MikeCAT

+0

你能告訴我如何在這種情況下使用strdup()..謝謝! – Lebanner

回答

5

您應該爲每個元素分配新緩衝區並像這樣複製內容。

char example[100], *buffer; 
strcpy(example, " "); 
strcat(example, player1->unitName[j]); 
strcat(example, " "); 
buffer = malloc(strlen(example) + 1); /* +1 for terminating null-character */ 
if (buffer != NULL) { 
    strcpy(buffer, example); 
} else { 
    /* handle error */ 
} 
map->map[x][y] = buffer; 

如果在系統中可用,則可以使用strdup()

char example[100]; 
strcpy(example, " "); 
strcat(example, player1->unitName[j]); 
strcat(example, " "); 
map->map[x][y] = strdup(example); 
+1

+1。不要忘記釋放內存。另一個例子是有一個三維數組:map-> map [x] [y] [100] =「誰是你的爸爸?」;'。但是,當然,由於內存浪費,這被認爲是不好的做法。 –

+0

@AndrejsCainikovs不知道實際的定義,你的例子看起來像執行超出範圍的訪問和無意義的指針到整數轉換。它不應該是'strcpy(地圖 - >地圖[x] [y],「誰是你的爸爸?」);'? – MikeCAT

+0

糟糕。道歉。工作中太多的Python。開始搞砸:) –