重新分配在C中的大文本文件中读取
问题描述:
我试图读取一个大的文本文件和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));
但这不工作。
答
可能是strlen(buffer)
大小为零,在这种情况下realloc可能会返回一个点为NULL。 从realloc返回时要安全检查NULL,甚至可能在调用realloc之前检查缓冲区的长度。
这很诱人做'text = realloc(text,newsize);'但这是潜在的内存泄漏。 –
'sizeof(text)'是指针大小,而不是内容大小。你需要'stelen(text)+ strlen(buffer)+ 1'作为新的大小。 – BLUEPIXY
我错过了什么吗?每次重新分配缓冲区的大小。你永远不会加入到realloc的大小,总是刚刚读取的缓冲区的大小... – John3136