2017-03-10 105 views
-3

我試圖讀取一個大的文本文件和strcpy/strcat到數組中。重新分配在C中的大文本文件中讀取

我有一個簡單的程序:

char buffer[500000]; 
char *text; 
text = malloc(sizeof(char) * 1); 
strcpy(text,""); 

while (fgets(buffer,sizeof(buffer),fp) != NULL) 
{ 
    text = realloc(text,sizeof(char) * strlen(buffer)); 
    strcat(text,buffer); 
    printf("%s",text); 
} 

的問題是重複的很多後最終會崩潰,但我不知道爲什麼。我試圖做

text = realloc(text,sizeof(char) * strlen(buffer) + sizeof(text)); 

但這不工作。

+0

這很誘人做'text = realloc(text,newsize);'但這是潛在的內存泄漏。 –

+0

'sizeof(text)'是指針大小,而不是內容大小。你需要'stelen(text)+ strlen(buffer)+ 1'作爲新的大小。 – BLUEPIXY

+0

我錯過了什麼嗎?每次重新分配緩衝區的大小。你永遠不會加入到realloc的大小,總是剛剛讀取的緩衝區的大小... – John3136

回答

0

可能是strlen(buffer)大小爲零,在這種情況下realloc可能會返回一個點爲NULL。 從realloc返回時要安全檢查NULL,甚至可能在調用realloc之前檢查緩衝區的長度。