提前感谢您的帮助。
我正在尝试调用一个函数,该函数将从我刚创建的正弦波二进制文件中读回日期。该文件已在主函数的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]);
}
}
感谢您的帮助, 安迪。
答案 0 :(得分:2)
需要检查fread()
的返回值以确保没有错误
for循环的条件应为i < end_time
似乎文件正在写入模式下打开,但读取和写入都已完成。
还需要检查fseek
的返回值。我假设fp
是一个有效的文件指针,并且在文件打开时已经检查了它的有效性。
由于您正在读取每个浮点数并打印出来,因此您可能不需要将其存储在数组缓冲区中。
答案 1 :(得分:0)
正如您的代码中所示,您在buffer
结束后阅读了一个元素。因为有效元素具有从0
到end_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++]);
或类似的,因为它是未定义的行为。