2017-03-10 59 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之前检查缓冲区的长度。