将文件读入内存?

时间:2012-08-04 17:41:56

标签: c pointers fread

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

#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);
}

2 个答案:

答案 0 :(得分:7)

buffer[siz]='\0';

之前插入printf("%s", buffer);

答案 1 :(得分:0)

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

http://en.wikipedia.org/wiki/Mmap

了解详情