我查看了手册页,并在线阅读了几个例子。我的所有其他系统和标准调用似乎都在处理相同的数据,为什么不在fread?
#include <stdlib.h>
#include <stdio.h>
unsigned char *data;
int main(int argc, char *argv[])
{
FILE *fp = fopen("test_out.raw", "rb");
if (fp == NULL) {
fprintf(stderr, "ERROR: cannot open test_out.raw.\n");
return -1;
}
long int size;
fseek(fp, 0L, SEEK_END);
size = ftell(fp);
if(size < 0) {
fprintf(stderr, "ERROR: cannot calculate size of file.\n");
return -1;
}
data = (unsigned char *)calloc(sizeof(unsigned char), size);
if (data == NULL) {
fprintf(stderr, "ERROR: cannot create data.\n");
return -1;
}
if (!fread(data, sizeof(unsigned char), size, fp)) {
fprintf(stderr, "ERROR: could not read data into buffer.\n");
return -1;
}
int i;
for (i = 0 ; i < size; ++i) {
if (i && (i%10) == 0) putchar('\n');
fprintf(stdout, " --%c-- ", (unsigned char)(data[i]));
}
free(data);
fclose(fp);
return 0;
}
答案 0 :(得分:2)
您使用fseek
移动到文件的末尾,然后您尝试从中读取它 - 但是,由于您已经在文件的末尾,因此读取失败,因为没有任何内容可供使用读取。
在尝试阅读之前,请使用另一个fseek
:
fseek(fp, 0L, SEEK_SET);
或更简单,使用rewind
:
rewind(fp);
答案 1 :(得分:1)
您正在调用fseek
来查找文件的末尾,这会将位置指示器移动到文件的末尾,因此当您调用fread时,没有数据可供读取。在尝试从中读取数据之前,您需要使用fseek
返回文件的开头。