C 将文件内容读取到内存,结果与32位操作系统和64位操作系统不同

C 将文件内容读取到内存,结果与32位操作系统和64位操作系统不同,c,fread,C,Fread,我在下面编写了一个函数,将文件内容读取到内存中。 它在我的本地机器Buntu 32位上运行良好,但在serverCentOS 64位上产生错误的结果 错误案例: 对于一个40字节的文件,内容如下,在64位操作系统上,它给了我错误的结果 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 守则: 调用者无法正确使用文件内容。它返回一个字符*,但不返回其长度,也不返回字符串,即它不是以null结尾的 只要你在读课文,就要这样做 content = malloc(st

我在下面编写了一个函数,将文件内容读取到内存中。 它在我的本地机器Buntu 32位上运行良好,但在serverCentOS 64位上产生错误的结果

错误案例: 对于一个40字节的文件,内容如下,在64位操作系统上,它给了我错误的结果

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
守则:

调用者无法正确使用文件内容。它返回一个字符*,但不返回其长度,也不返回字符串,即它不是以null结尾的

只要你在读课文,就要这样做

  content = malloc(st.st_size + 1); // + 1 here for the nul terminator
  ret = fread(content, 1, st.st_size, stream);

  if (ret != st.st_size) {
    fprintf(stderr, "Failed to read file %s\n", filename);
    exit(1002);
  }
  content[st.st_size] = 0; //nul terminate

什么是错误的输出?您是否使用“\0”终止了内容?@Rohan是的,错误的结果不是正确终止的。但为什么它在32位操作系统中运行良好?@xdazz大多数情况下都很幸运,也许在malloc给你的那篇文章之后,内存中碰巧有一个零字节,而在你的另一个平台上,该内存包含了其他内容。@不,但只有40字节的文件给出了错误的结果,其他文件是可以的,这很奇怪。该文件有39 a,而st.st_大小是40,字符串长度应该是39,为什么我需要+1?@CyberDem0n但文件中没有\n。@xdazz然后某个地方被误诊了。wc-c文件真的给了你39分吗?也许在所有a之后还有另一个垃圾/不可打印字符。检查od-t x1文件ls-l说了什么?你是如何/在哪里打印st.st_尺寸的?@不,对不起,你说得对。wc-c文件给出40。你知道为什么echo'a'>foo会使文件包含\n吗?echo就是这样做的,它会添加一个换行符。使用echo-na>foo省略换行符。
  content = malloc(st.st_size + 1); // + 1 here for the nul terminator
  ret = fread(content, 1, st.st_size, stream);

  if (ret != st.st_size) {
    fprintf(stderr, "Failed to read file %s\n", filename);
    exit(1002);
  }
  content[st.st_size] = 0; //nul terminate