试图从文件中读回二进制数据,导致崩溃

时间:2015-10-31 22:28:29

标签: c file io binary fread

提前感谢您的帮助。

我正在尝试调用一个函数,该函数将从我刚创建的正弦波二进制文件中读回日期。该文件已在主函数的w + b中打开。我想将数据复制到我的缓冲区数组,然后打印出来。

end_time是文件中的样本总数。样本已写为浮点数。代码块没有错误,但是当程序到达这一点时程序崩溃了,我不知道为什么。

void printwave(FILE *fp, int end_time)
{
   int i;

   float buffer[end_time];
   fseek(fp, 0, SEEK_SET);


   for(i=0; i==end_time; i++)
   {
        fread(buffer, sizeof(float), 1, fp);
        printf("%d\t%.2f\n", i, buffer[i]);
   }

}

感谢您的帮助, 安迪。

2 个答案:

答案 0 :(得分:2)

需要检查fread()的返回值以确保没有错误

for循环的条件应为i < end_time

似乎文件正在写入模式下打开,但读取和写入都已完成。

还需要检查fseek的返回值。我假设fp是一个有效的文件指针,并且在文件打开时已经检查了它的有效性。

由于您正在读取每个浮点数并打印出来,因此您可能不需要将其存储在数组缓冲区中。

答案 1 :(得分:0)

正如您的代码中所示,您在buffer结束后阅读了一个元素。因为有效元素具有从0end_time - 1的索引,因此对代码的即时修复是

while ((i < end_time) && (fread(buffer, sizeof(float), 1, fp) == 1))
{
    printf("%d\t%.2f\n", i, buffer[i]);
    i += 1;
}

注意:不要尝试printf("%d\t%.2f\n", i, buffer[i++]);或类似的,因为它是未定义的行为。