/ / comment écrire un entier dans un fichier (différence entre fprintf et fwrite) - c, fwrite, printf

comment écrire un entier dans un fichier (la différence entre fprintf et fwrite) - c, fwrite, printf

J'ai essayé d'écrire un entier dans un fichier (le mode ouvert est w). fprintf l'a écrit correctement mais fwrite a écrit charabia:

int length;
char * word = "word";

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

et le résultat dans le fichier est:

mot

mais si j'utilise fprintf à la place, comme ceci:

int length;
char * word = "word";

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

Je reçois ce résultat dans le fichier:

4 mots

quelqu'un peut-il dire ce que j'ai mal fait? Merci!

update: je voudrais éventuellement changer l'écriture en binaire (j'ouvrirai le fichier en mode wb), y aura-t-il une différence dans mon implémentation?

Réponses:

19 pour la réponse № 1

fprintf écrit une chaîne. fwrite écrit des octets. Donc, dans votre premier cas, vous écrivez les octets qui représentent un entier dans le fichier; si sa valeur est "4", les quatre octets seront dans la plage ASCII non imprimable, vous ne les verrez donc pas dans un éditeur de texte. Mais si vous regardez la taille du fichier, ce sera probablement 8, pas 4 octets.


1 pour la réponse № 2

En utilisant printf() convertit l'entier en une série de caractères, dans ce cas "4". En utilisant fwrite() provoque l'écriture des octets contenant la valeur entière, dans ce cas, les 4 octets des caractères "w", "o", "r", et "d".