2013-11-17 6 views
1

Я использую GDB для прохождения моего кода, и каждый раз, когда вводится цикл while, значения в NameList [] изменяются. Как я установил NameList [0] в chr2, но когда я возвращаюсь через цикл while в gdb, я говорю x/s NameList [0] и теперь он установлен на новое значение chr2! Как это может случиться? Я знаю, что меняю указатель, но не должен ли массив хранить старое значение указателя и не разрешено его обновлять?Coding in C, Почему меняются значения массива?

while (fgets(thisline, length, input) != NULL) { 
    chr = strtok(Line, " "); 
    if(chr != NULL) { 
     chr2 = strtok(chr, " ") 
     int j = 0; 
     while(NameList[j] != NULL) { 
      j++; 
     } 
     NameList[j] = chr2; 
    } 
} 

ответ

1

Попробуйте изменить

NameList[j] = chr2; 

в

NameList[j] = strdup(chr2); 

И посмотреть, что происходит. Проблема в том, что вы просто сохраняете указатель на массив символов, и этот массив символов изменяется из-под вас. Функция strdup копирует весь массив.

+0

Большое вам спасибо, что сработало! – user3002440

+0

@ user3002440 Но не забудьте 'free()' после использования. – glglgl

Смежные вопросы