字符串数组

时间:2011-03-23 11:50:56

标签: c string multidimensional-array

我有一个有趣的问题。

我定义,

typedef char *string;

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

在每次迭代中,我分配不同的字符串。例如, buf [0]应为“1111111111” buf [1]应该是“2222222222”等等。 但是当我在i = 1时分配“2222222222”时,buf [0]也变为“2222222222”。可能是什么问题呢?

3 个答案:

答案 0 :(得分:1)

问题是buf中的所有条目都指向相同的字符串 - 名为array的字符串。因此,更改array会影响所有buf条目。

您可以通过为每次迭代分配一个新字符串来解决此问题,例如:你的伪代码会变成:

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

确保在完成使用后free()所有字符串。

答案 1 :(得分:0)

您可能没有为buf中的每个条目分配新字符串。而是在每个buf条目中保存对相同字符串的引用。

答案 2 :(得分:0)

当您执行buf[i]=array;时,您将char array[10]的地址放入buf[i]。 不要惊讶,每个buf[i]具有相同的地址和相同的值。