对"fopen"的期望

Expection thrown on "fopen"

本文关键字:期望 fopen      更新时间:2023-10-16

我写了一个函数来读回二进制文件。在进行调试时,它在"pFile=fopen(文件名,"rb");"行上显示"异常抛出"。我不知道为什么。另外,如何在函数"read_back(const char*filename)"中返回回读缓冲区

void read_back(const char *filename)
{
    FILE* pFile;
    long lSize=100;
    char* buffer;
    buffer = (char*)malloc(sizeof(char)*lSize);
    pFile = fopen(filename, "rb");
    if (pFile == NULL) { fputs("File error", stderr); exit(1); }
    // copy the file into the buffer:
    size_t result = fread(buffer, 1, lSize, pFile);
    if (result != lSize) { fputs("Reading error", stderr); exit(3); }
       fclose(pFile);   
}
int main() 
{
    const char *fname[2];
    fname[1] = "C:\1_data.bin";
    fname[2] = "C:\2_data.bin";
    fname[3] = "C:\3_data.bin";
    for (int i = 0; i < 2; ++i) 
    {
        read_back(fname[i]);
    }
    return 0;
}

代码中的几个问题。

首先,数组索引以 0 开头。fname2 char *数组,您错过了初始化fname[0]。此外,您正在初始化数组的末尾 - fname[2]fname[3] .由于您的程序应该读取三个文件,因此您应该执行以下操作:

    const char *fname[3];
    fname[0] = "C:\1_data.bin";
    fname[1] = "C:\2_data.bin";
    fname[2] = "C:\3_data.bin";

将循环条件更改为 i < 3

read_back() 中,您将lSize设置为100和下面的代码

if (result != lSize) { fputs("Reading error", stderr); exit(3); }

这意味着,要读取的文件应该具有字节数,由 fread() 读取,要么100要么更多,否则它是一个Reading error。此外,如果文件超过 100 个字节,则除了前 100 个字节外,它将是未读取的。您可能应该循环调用fread()并读取直到文件末尾。