尽管文件非空,但读入缓冲区的内容是空白的
fread into buffer is blank despite non-empty file
我正在尝试从一个 65536 字节的文件中读入 256 字节的缓冲区,使用 fopen、fread、fwrite 和 fseek 将其视为随机访问文件。我没有收到任何错误,但读取后缓冲区仍然为空,即使文件非空并且 fread 报告读取 256 字节。这是我的代码:
FILE *file = NULL;
char buffer[255];
memset(buffer, 0, sizeof(buffer));
file = fopen("BACKING_STORE.bin","r");
if(file == NULL) {
printf("Error: can't open file.\n");
return NULL;
} // end if
if(fread(buffer, 1, 256, file) != 256) {
printf("Error: reading from file failed.\n");
return NULL;
} // end if
printf("The bytes read are [%s]\n", buffer);
fclose(file);
为了确认,我在十六进制编辑器中打开了 BACKING_STORE.bin 文件,以确保它不是空的。这是一个截图:
在 运行 这个程序之后,我得到输出:"The bytes read are []" 但没有任何错误。
我对 C 还很陌生,所以我确定它只是缺少一些简单的东西。
感谢您的帮助。 :)
因为用"%s"
和printf()
不能输出二进制数据。如果你想看内容你可以写一个循环并打印每个字节的十六进制值,像这样
for (size_t i = 0 ; i < 256 ; ++i) {
fprintf(stdout, "0x%02x ", buffer[i]);
if ((i + 1) % 8 == 0) {
fputc('\n', stdout);
}
}
我正在尝试从一个 65536 字节的文件中读入 256 字节的缓冲区,使用 fopen、fread、fwrite 和 fseek 将其视为随机访问文件。我没有收到任何错误,但读取后缓冲区仍然为空,即使文件非空并且 fread 报告读取 256 字节。这是我的代码:
FILE *file = NULL;
char buffer[255];
memset(buffer, 0, sizeof(buffer));
file = fopen("BACKING_STORE.bin","r");
if(file == NULL) {
printf("Error: can't open file.\n");
return NULL;
} // end if
if(fread(buffer, 1, 256, file) != 256) {
printf("Error: reading from file failed.\n");
return NULL;
} // end if
printf("The bytes read are [%s]\n", buffer);
fclose(file);
为了确认,我在十六进制编辑器中打开了 BACKING_STORE.bin 文件,以确保它不是空的。这是一个截图:
在 运行 这个程序之后,我得到输出:"The bytes read are []" 但没有任何错误。
我对 C 还很陌生,所以我确定它只是缺少一些简单的东西。
感谢您的帮助。 :)
因为用"%s"
和printf()
不能输出二进制数据。如果你想看内容你可以写一个循环并打印每个字节的十六进制值,像这样
for (size_t i = 0 ; i < 256 ; ++i) {
fprintf(stdout, "0x%02x ", buffer[i]);
if ((i + 1) % 8 == 0) {
fputc('\n', stdout);
}
}