对"fopen"的期望
Expection thrown on "fopen"
我写了一个函数来读回二进制文件。在进行调试时,它在"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
开头。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()
并读取直到文件末尾。
相关文章:
- 试图创建流或fopen时程序崩溃
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- 一元*运算符的操作数是否期望一个 prvalue
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- fopen 在 gdb 中返回 NULL
- 什么 /可以/ 你从一个函数返回. 并期望它在到达时还活着?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 根据实例化点期望不同的类型
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- C++ 期望":"(冒号)的构造函数
- fopen 在创建大量文件后因 EFBIG "File too large" 而失败
- 将 std::vector::d ata 传递给函数期望类型**(双指针)
- 期望在奇怪的地方有一个";"
- 如何期望通过使用Google Test(Mock)以特定频率调用函数
- 如何测试序列生成器将生成期望的项目
- 提升精神 x3 错误处理程序与期望
- fopen 与常量字符 * 从 QString 是不可能的
- C++中的后缀不像我期望的那样表现
- MSVC++ 17 std::copy 期望自定义迭代器的"operator -"
- 对"fopen"的期望