При записи значений в файл в C под Windows я получаю то, что кажется неправильным, и результат отличается от той же программы, что и в Cygwin.write() не записывает правильное количество байтов в окнах в C
В этом случае, я пишу поплавок в файл:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main(void)
{
int fd;
float f;
fd = open("file.a", O_RDWR | O_CREAT);
f = (float)atof("-0.1352237");
printf("%.7f\n", f);
write(fd, (void *)&f, sizeof(float));
close(fd);
printf("sizeof(float): %d\n", sizeof(float));
return (EXIT_SUCCESS);
}
я составил и запустить этот файл как на Windows, так и в Cygwin (без включаемые), и я не получив тот же результат. Поскольку я пишу поплавок, я бы ожидать, что выходной файл имеет 4 байта, написанные для него
Однако, выход при компиляции cl.exe в командной строке, кажется неправильным:
1578 0d0a be
Если я прочитаю из файла в поплавок, я не получу правильное значение, очевидно. И количество байтов, записанных в файл неправильно, это должно быть только 4 байта, а не 5.
Это то, что я получаю, когда работает в Cygwin:
1578 0abe
Это правильно. Если я прочитаю это из файла в поплавок, я получу правильное значение (-0.1352237).
Я что-то упустил? Ошибочны ли реализации этих функций в окнах? Или, может быть, я не правильно записываю данные?
Какая основная ошибка! Спасибо, что исправляет проблему и имеет смысл. Но почему это написано? и он записывается между двумя байтами. – dotminic
Поскольку значение ASCII для '\ n' равно' 0a' (т. Е. 10 в десятичной системе). У одного из ваших байтов есть это значение. –
Хорошо, имеет смысл, я вижу, что я делаю неправильно. Благодарю. – dotminic