【问题标题】:fread not writing to ptrfread 不写入 ptr
【发布时间】: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" 的模式

标签: c file stream fread


【解决方案1】:

一般来说,如果你想更好地理解 printf 的输出是什么,你可以这样写:

printf("Test: <%s> - (len=%lu)\n", block, strlen(block));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多