试图从文件中读回二进制数据,导致崩溃
Trying to read back binary data from a file, causing crash
在此先感谢您的帮助。
我正在尝试调用一个函数,该函数将从我刚刚创建的正弦波二进制文件中读回日期。该文件已在主函数中的 w+b 中打开。我想将数据复制到我的缓冲区数组,然后打印出来。
end_time 是文件中的样本总数。示例已写为浮点数。 Code Blocks 没有给出任何错误,但是当它到达这一点时程序崩溃了,我不确定为什么。
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]);
}
}
感谢您的帮助,
安迪.
需要检查fread()
的return值,确保没有错误
for循环的条件应该是i < end_time
文件似乎是以写模式打开的,但是读和写都完成了。
Return fseek
的值也需要检查。我假设 fp
是一个有效的文件指针,并且在打开文件时已经检查了它的有效性。
由于您正在读取每个浮点数并打印出来,因此您可能不需要将其存储在数组缓冲区中。
在您的代码中,您读取了 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++]);
或类似的,因为它是未定义的行为。
在此先感谢您的帮助。
我正在尝试调用一个函数,该函数将从我刚刚创建的正弦波二进制文件中读回日期。该文件已在主函数中的 w+b 中打开。我想将数据复制到我的缓冲区数组,然后打印出来。
end_time 是文件中的样本总数。示例已写为浮点数。 Code Blocks 没有给出任何错误,但是当它到达这一点时程序崩溃了,我不确定为什么。
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]);
}
}
感谢您的帮助, 安迪.
需要检查fread()
的return值,确保没有错误
for循环的条件应该是i < end_time
文件似乎是以写模式打开的,但是读和写都完成了。
Return fseek
的值也需要检查。我假设 fp
是一个有效的文件指针,并且在打开文件时已经检查了它的有效性。
由于您正在读取每个浮点数并打印出来,因此您可能不需要将其存储在数组缓冲区中。
在您的代码中,您读取了 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++]);
或类似的,因为它是未定义的行为。