Мне нужно написать код на C, который записывает удваивается в файл.
Для некоторых значений fwrite записывает правильный 8-байтовый двоичный файл в файл. Для других значений, кажется, предшествует дополнительный 9-й байт. Например, этот код записывает 9 байтов, содержащих x0d, за которыми следуют правильные 8 байтов:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <float.h>
#define PI 3.14159265358979323846
int main()
{
// Generate a number
double x = -3.0 * cos(PI * 5.0 / 8.0);
printf("%.*e\n", DECIMAL_DIG, x);
// Uncomment this to get an 8-byte file instead of 9
// x = (float) x;
// Write number to file
FILE* fw = fopen("out.bin", "w");
if (fw != NULL)
{
size_t Nw = fwrite(&x, sizeof(double), 1, fw);
printf("Wrote %i values to file.\n", Nw);
if (fclose(fw) != 0)
return (EXIT_FAILURE);
}
else
return (EXIT_FAILURE);
return (EXIT_SUCCESS);
}
Однако, если я изменю значение, например на double x = -3.0 * cos(PI * 3.0 / 8.0);
, или даже если я просто приведу число к float и обратно (см. «Раскомментируйте это ...» в вышеприведенном коде), тогда правильное значение 8 записано байтов.
Я компилирую с MinGW GCC-6.3.0-1. Что я делаю не так?