0

如果我明确声明缓冲区大小,我似乎只能将文件读入内存。这有效

#include <stdio.h>
int main(){
  FILE *fp = fopen("test.log", "rb");
  char buffer[37];
  fread(buffer, 1, 36, fp);
  printf("%s", buffer);
}

这会将垃圾添加到输出中

#include <stdio.h>
int main(){
  FILE *fp = fopen("test.log", "rb");
  fseek(fp, 0, SEEK_END);
  long siz = ftell(fp);
  rewind(fp);
  char buffer[siz + 1];
  fread(buffer, 1, siz, fp);
  printf("%s", buffer);
}
4

2 回答 2

7

buffer[siz]='\0';在之前插入printf("%s", buffer);

于 2012-08-04T17:49:16.530 回答
0

尝试不同的方法 - 使用“内存映射”。它的作用是允许您像访问内存块一样访问文件。这可以显着提高性能,同时简化您的代码。

在http://en.wikipedia.org/wiki/Mmap了解更多信息

于 2012-08-04T17:52:13.080 回答