函数 "fread()" 不读取特定文件类型?
Function "fread()" not reading specific file types?
我有这段代码是为了将一些文件加载到内存中,进入 data .
我想读取同一路径下的三个文件:XML、PNG 和一个 TTF 字体文件。三个都打开成功,大小如size。不幸的是,只有 XML 和 PNG 被读入 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
中的内容:一个空字节,然后是更多字符。所以它实际上不是空的;你只是错误地认为它是。
我有这段代码是为了将一些文件加载到内存中,进入 data .
我想读取同一路径下的三个文件:XML、PNG 和一个 TTF 字体文件。三个都打开成功,大小如size。不幸的是,只有 XML 和 PNG 被读入 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
中的内容:一个空字节,然后是更多字符。所以它实际上不是空的;你只是错误地认为它是。