我写了一个函数来读回二进制文件。进行调试时,它在“ pFile = fopen(filename,“ 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 :(得分:2)
您的代码中有几个问题。
首先,数组索引以0
开头。 fname
是2
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()
并阅读直到文件末尾。