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ď č. 1fprintf
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"
.