【发布时间】:2018-05-12 12:01:56
【问题描述】:
我正在尝试从名为“binary.bin”的二进制文件中读取,该文件的内容为“this”。我期待它分别给我“t”、“h”、“i”、“s”的 ASCII 值,但它给了我 5 个零。
void bin_byte_by_byte(char *filename) {
FILE *fptr;
unsigned long len;
int *buffer;
fptr = fopen(filename, "rb");
if(!fptr) {
printf("error: file does not exist");
return;
}
// get file lenght - create a function to this
fseek(fptr, 0, SEEK_END);
len = ftell(fptr);
fseek(fptr, 0, SEEK_SET);
buffer = (int*)malloc(sizeof(int) * len);
if(!buffer) {
printf("error: unable to allocate memory");
fclose(fptr);
return;
}
fread(&buffer, sizeof(buffer), len, fptr);
printf("len = %d\n", len);
for(int i = 0; i < len; i++) {
printf("%d ", buffer[i]);
}
if(fclose(fptr) != 0) {
printf("File did not close as expected");
}
free(buffer);
}
【问题讨论】:
-
检查相关系统调用的结果不仅仅是免费调试,而且对于编写可靠的,即可用的代码至关重要。提示:记录、阅读并理解
fread()返回的内容。 -
顺便说一句,在 C 语言中,不需要将
malloc()转换为/从任何其他void-指针转换。