Так вот что я получил:Зачем писать странные вещи?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
int main()
{
FILE *fin;
struct STR {
float d;
int x;
} testing;
testing.d = 11.12;
testing.x = 31121;
fin = fopen("output.txt", "w");
//fprintf(fin,"%7.4f %7d\n",testing.d,testing.x);
fwrite(&testing, sizeof(struct STR),1,fin);
fclose(fin);
return 0;
}
Так что же происходит, когда я скомпилировать и запустить? Я получаю это:
"…ë1A‘y "
Когда я закомментируйте fwrite
и использовать fprintf
, я получаю это:
"11.1200 31121"
Может кто-нибудь объяснить мне это? Я попытался запустить его на windows и linux, и оба раза вывод был неясным.
Кроме того, я думаю, что, пока мы находимся на тему, как размер текстового файла с «11.1200 31121» равен 16 байтам? Я думал, что целые числа (на 32-битной машине) равны по 4 байта? Это 16 байт, потому что в txt-файле содержится 16 общих символов?
Благодаря
'fprintf()' преобразует числа в формат для чтения человеком в соответствии с типом номера (int, float и т. Д.), А 'fwrite()' записывает число в двоичном формате, точно как он хранится в памяти , когда вы используете 'fwrite()' для сохранения struct, вы используете 'fread()' для чтения в struct, не нужно делать преобразования. но 'fprintf' вам придется делать некоторые преобразования из текста обратно в двоичный формат, и это преобразование обрабатывается функциями' sscanf() 'и аналогичными – milevyo