Массив строк - PullRequest
       5

Массив строк

0 голосов
/ 23 марта 2011

У меня интересная проблема.

Я определяю,

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" и так далее. Однако, когда я назначаю «2222222222», когда i = 1, buf [0] также изменяется на «2222222222». В чем может быть проблема?

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Проблема в том, что все записи в buf указывают на одну и ту же строку - ту, которая называется array. Таким образом, изменение array повлияет на все buf записи.

Вы можете исправить это, выделив новую строку для каждой итерации, например, Ваш псевдокод станет:

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

Обязательно free() все строки, когда вы закончите, используя их.

0 голосов
/ 23 марта 2011

Когда вы делаете buf[i]=array;, вы помещаете адрес вашего char array[10] в buf[i]. Не удивительно, каждый buf[i] имеет один и тот же адрес и одно и то же значение.

0 голосов
/ 23 марта 2011

Возможно, вы не выделяете новую строку для каждой записи в buf. Вместо этого вы сохраняете ссылку на одну и ту же строку в каждой записи буфера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...