2011-03-23 197 views
0

我有一個有趣的問題。字符串數組

我定義,

typedef char *string; 

char array[10];  
string buf[10]; 
i=0; 
while(1){  
    array=<assign_string>  
    buf[i]= array;   
    i++; 
}  

在每次迭代i分配不同的字符串。例如, buf [0]應該是「1111111111」 buf [1]應該是「2222222222」等等。 但是當我在i = 1時分配「2222222222」時,buf [0]也變爲「2222222222」。可能是什麼問題呢?

+1

顯示*真實*代碼 – Erik 2011-03-23 11:53:38

回答

1

問題是buf中的所有條目都指向相同的字符串 - 名爲array。因此更改array將影響所有buf條目。

你可以通過爲每次迭代分配一個新的字符串來解決這個問題。您的僞代碼將變爲:

string buf[10]; 
i=0; 
while(1){  
    buf[i]= strdup(<array_string>); 
    i++; 
} 

確保在使用完所有字符串後,請使用free()

+0

感謝Frerich。使用strdup解決了我的問題。 – thetux4 2011-03-23 12:04:07

+0

btw,你的「typedef char * string;」已經隱藏了問題。這正是爲什麼「char *」不是C中的字符串的原因。在C中,沒有數據類型「string」。 – 2011-03-23 12:26:09

0

您可能沒有爲buf中的每個條目分配一個新字符串。相反,您要在每個buf條目中保存對相同字符串的引用。

0

當你做buf[i]=array;你把你的char array[10]的地址放到buf[i]。 沒有驚喜,每個buf[i]具有相同的地址和相同的值。