2010-09-10 69 views
0

我有一個函數C - 指針問題 - 如何用值指針填充數組指向?

void add_car(char *car) { 
    park.buffer[park.size] = car; 
    park.size ++; 
} 

車子就像 「XYZ」 的字符串。 Atm,它似乎將停車場緩衝區數組元素分配給一個地址。因此,如果我用10輛汽車填滿陣列,我可以收回10輛汽車,但由於汽車地址被覆蓋,每輛車都是最新的。我該如何填充carpark.buffer與汽車的實際價值。

總mindblank ATM

回答

3

假設park.bufferchar*一個數組,你可能需要使用

park.buffer[park.size] = strdup(car); 

需要注意的是,不可避免地,這使得副本(不可缺少的,如果你不希望進一步改變car影響park.buffer!)擁有park(這意味着,在完成時,你必須free從那裏,因爲strdup隱含做了malloc [和strcpy太當然;-)])。

順便說一句,你需要#include <string.h>在你的文件的頂部(如果你還沒有這樣做),以便使用strdup

+0

是的,char *是char *的數組,謝謝。 – 2010-09-10 02:03:54

+0

@多米尼克,那麼'strdup'聽起來是對的(但最後要記得「釋放」它們!)。 – 2010-09-10 02:26:51

+1

'strdup()'不是標準函數;這是POSIX(沒有錯)。只是想我會提到它。 – pmg 2010-09-10 08:02:29

2

在C複製「字符串」你需要使用strcpy,你不希望它複製到park.buffer結束,你可能想將其複製到第0位置。

1

如果沒有更多的上下文,很難確切地知道你在做什麼。但我認爲park.buffer是一個指針數組。

,因爲汽車的地址被覆蓋

汽車的地址不被覆蓋。

另外,您應該非常小心您如何使用add_car函數。如果你一直這麼叫,你可能會覆蓋不屬於你的內存。此外,您還需要小心,因爲您正在捕獲其地址,所以您傳入此函數的內容不會被釋放。

你是正確的=設置字符串的地址,但不復制整個字符串。