我有一个有趣的问题。
我定义,
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”。可能是什么问题呢?
答案 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]
具有相同的地址和相同的值。