2012-04-23 6 views
2

Im делает небольшое упражнение для чтения файла, который содержит одну длинную строку и загружает это в массив строк. До сих пор у меня есть:У меня проблема с fgets в C++

char* data[11]; 
char buf[15]; 
int i = 0; 

FILE* indata; 
indata = fopen("somefile.txt", "r"); 
while(i < 11) 
{ 
    fgets(buf, 16, indata); 
    data[i] = buf; 
    i++; 
} 

fclose(indata); 

somefile.txt: "aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaahhhhhbbbbdddddddddddddbbbbb"

и т.д ..

Об этом говорится в 15 символов, добавляет эту строку в массив и получает следующий 15. Проблема массив всегда равен последней строке, поэтому, если последняя строка представляет собой «ccccv» весь массив, данные [0] = «ccccv», данные [1] = «ccccv», данные [2] = «ccccv» и т. д. на.

Кто-нибудь знает, почему это происходит, и есть ли лучший способ сделать это? Спасибо

ответ

2

Каждый указатель в data указывает на ту же область памяти, которая является buf. Вам необходимо использовать strcpy + malloc.

Также кажется, что у вас есть «второстепенное» переполнение буфера. buf - это размер 15, и вы читаете 16 символов.

+0

Он должен использовать 'malloc' +' strcpy' или 'strdup', поскольку данные представляют собой массив указателей. – mfontanini

+0

Добавьте к этому, что strcpy не будет работать без конечного \ 0; по крайней мере strncpy следует использовать; в лучшем случае memcpy. – ypnos

+0

Право ... я пропустил это – mihai

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