为什么尝试读取 8 个字节时 fread() 在这里不起作用? (C 编程)

问题描述 投票:0回答:1

我正在尝试使用 fread() 将文件的内容传递给一次需要 8 个字节的函数,并测量从开始到结束需要多长时间,每 8 个字节调用并向该函数传递参数.

我已经能够在一次读取 1 个字节并将该字节传递给“functionX”时完成这项工作,该“functionX”将 1 个字节作为参数,输入参数为“(const char *str)”。

    FILE *fp = fopen(argv[1], "r");
    char *buffer;
    //Begin timer
    while (((fread(&buffer, 1, 1, fp)) != 0)) {
        functionX(buffer);
    }
    //End timer
    fclose(fp);

我也需要做同样的事情,但一次读取(并传递)8 个字节到“functionY”,它具有与 functionX 相同的输入参数,但每次传递 8 个字节。 但是,当我尝试这样做时,会导致分段错误,我不确定为什么。

    //The buffer declaration in previous code segment is the same 
    //variable used here, I just didn't copy over that statement
    FILE *fp2 = fopen(argv[1], "r");
    //start timer
    while (((fread(&buffer, 8, 1, fp2)) != 0)) {
        functionY(buffer);
    }
    //end timer
    fclose(fp2);

我不确定为什么会发生这种情况,我假设我对 fread() 工作原理的理解就是问题所在,但不确定具体原因。

c fread
1个回答
0
投票

您应该将缓冲区声明为 char[1](或在第二种情况下为 char[8])。

© www.soinside.com 2019 - 2024. All rights reserved.