2011-03-23 111 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]具有相同的地址和相同的值。