【发布时间】:2018-05-06 20:23:17
【问题描述】:
我正在尝试使用 fread 读取文件的内容,但内容并未写入 ptr。我已经用 ftell() 函数验证了流中的位置正在改变,但是没有内容写入 ptr。
我已经在另一个代码中实现了相同的功能,唯一的区别是在这种情况下它是一个结构而不是 char *,我无法根据文档找出为什么会这样。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// ensure proper usage
if (argc != 2)
{
fprintf(stderr, "Usage: recover infile\n");
return 1;
}
char *infile = argv[1];
// open input file
FILE *inptr = fopen(infile, "r");
if (inptr == NULL)
{
fprintf(stderr, "Could not open %s.\n", infile);
return 2;
}
char *block;
block = malloc(sizeof(char)*64);
fread(block, 1, 64, inptr);
printf(" es %s \n", block);
int position = ftell(inptr);
printf("position %d \n", position);
free(block);
fclose(inptr);
}
malloc 目前是一个占位符。
关于为什么文件上的数据没有被写入块的任何解释?
【问题讨论】:
-
您的意思是 printf 没有显示任何内容?不过应该……你的 infile 没问题?
-
正确的 printf 不显示任何内容(除了“es” obvs),infile 肯定有内容,我不知道是否有任何其他因素会影响它,因为 fopen 有效跨度>
-
我看不出这个程序有什么问题。 malloc 返回 NULL 或文件顶部有一些奇怪的字符(例如 0 或 BOM)
-
在这里工作。 (顺便说一句:您是否正在读取二进制文件(以 NUL 开头)BTW2:您的缓冲区不是 NUL 终止的。
-
您可能需要调整您的
fopen以指定"rb"的模式