/ / ako zapísať celé číslo do súboru (rozdiel medzi fprintf a fwrite) - c, fwrite, printf

ako napísať celé číslo do súboru (rozdiel medzi fprintf a fwrite) - c, fwrite, printf

Snažil som sa napísať celé číslo do súboru (otvorený režim je w). fprintf to napísal správne, ale fwrite napísal gibberish:

int length;
char * word = "word";

counter = strlen(word);
fwrite(&length, sizeof(int), 1, file);
fwrite(word, sizeof(char), length, file);

a výsledok v súbore je:

slovo

ale ak namiesto toho používam fprintf, takto:

int length;
char * word = "word";

counter = strlen(firstWord);
fprintf(file, "%d", counter);
fwrite(word, sizeof(char), length, file);

Tento výsledok získam v súbore:

4word

môže niekto povedať, čo som urobil zle? Vďaka!

update: Nakoniec by som chcel zmeniť písanie na binárne (otvorím súbor v móde wb), bude to rozdiel v mojej implementácii?

odpovede:

19 pre odpoveď č. 1

fprintf zapíše reťazec. fwrite zapíše bajty. Takže vo vašom prvom prípade "znovu zapíšete bajty, ktoré predstavujú celé číslo do súboru; ak je jeho hodnota" 4 ", štyri bajty budú v netlačiteľnom rozsahu ASCII, takže ich nebudete vidieť. textového editora. Ale ak sa pozriete na veľkosť súboru, bude pravdepodobne 8, nie 4 bajty.


1 pre odpoveď č. 2

Použitím printf() v tomto prípade konvertuje celé číslo na sériu znakov "4", Použitím fwrite() spôsobí zapísanie skutočných bajtov obsahujúcich celočíselnú hodnotu, v tomto prípade 4 bajty pre znaky "w", "o", "r", a "d".