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

问题描述 投票:0回答:1

我有这段代码,以便将一些文件加载到内存中,进入data

我想读取同一路径中的三个文件:一个 XML、一个 PNG 和一个 TTF 字体文件。三个都已成功打开,其大小如size所示。不幸的是,只有 XMLPNG 被读入 data

TTF 文件获得正确的 size,同样正确的 fread result,但空(非空)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++ fread
1个回答
0
投票

NUL 字节并不神奇地意味着它所在的任何内容的结束。它只是许多 C 标准库函数使用的约定。对于包含 NUL 字节并在其后包含更多字符的文件来说,这是完全有效的。这正是您的

data
中的内容:一个 NUL 字节,然后是更多字符。所以它实际上并不是空的;而是空的。你只是错误地假设了它。

© www.soinside.com 2019 - 2024. All rights reserved.