函数 "fread()" 不读取特定文件类型?

Function "fread()" not reading specific file types?

我有这段代码是为了将一些文件加载​​到内存中,进入 data .

我想读取同一路径下的三个文件:XMLPNG 和一个 TTF 字体文件。三个都打开成功,大小如size。不幸的是,只有 XMLPNG 被读入 data .

TTF文件得到正确的size,同样正确的result of fread,但是一个空的(不为空)data 和空 fp->_base.

  char* data;
  size_t size = 0;
  FILE *fp = fopen(completeFilePath, "rb");
  if (fp != NULL) {
    fseek(fp, 0, SEEK_END);
    size = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    data = new char[size];
    size_t result = fread(data, sizeof(char), size, fp);
    fclose(fp);
  }

你能解释一下这个问题吗?

非常感谢。

空字节并不神奇地意味着它所在的任何内容的结束。它只是许多 C 标准库函数使用的约定。一个文件包含一个空字节然后后面有更多字符是完全有效的。这正是您的 data 中的内容:一个空字节,然后是更多字符。所以它实际上不是空的;你只是错误地认为它是。