【发布时间】:2022-01-24 20:54:40
【问题描述】:
我有获取参数的函数:char* filedata(存储整个文件)和FILE *fp(打开的文件)。
void read_file(char *filedata, FILE *fp){
char buffer[1000];
while(fgets(buffer, sizeof(buffer), fp))
{
char *new_str;
if((new_str = malloc(strlen(filedata) + strlen(buffer)+1)) != NULL)
{
new_str[0] = '\0'; // ensures the memory is an empty string
strcat(new_str, filedata);
strcat(new_str, buffer);
}
else
{
printf("malloc failed!\n");
}
strcpy(filedata, new_str);
}
fclose(fp);
}
但这并不太快……有没有更快的方法来读取整个文件?
【问题讨论】:
-
您想阅读所有行,而不仅仅是简单的阅读。如果为真,请编辑标题。
-
“快速”定义不明确。快速打开文件?快速访问文件中的数据?什么是足够快的?有什么要求?
-
对我来说看起来很泄漏:(
-
您的问题的答案:是的。也就是说,除了惊人的内存泄漏之外,我认为您从未听说过Shlemiel, The Painter。仅供参考,无论谁为您的函数编写规范,他们都会从
gets的所有错误中提取一页并将其体现在文件读取操作中。例如,一个指向目标数据的指针,没有任何关于实际存在多少空间的参考。这是厄运的秘诀。这也使其余的一切变得毫无意义。只需继续将数据转储到该目标中,随时推进filedata。那么……不要。
标签: arrays c file optimization