2010-10-03 3 views
1

Pourquoi ce code ne fonctionne-t-il pas comme prévu?Comment écrire dans un fichier binaire en C?

#include <cstdio> 
    int main() 
{ 
char mona[] =  
        "\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x01\x90" 
        "\x00\x00\x02\x5d\x01\x03\x00\x00\x00\x26\xef\xb3\x78\x00\x00\x00\x45\x74\x45\x58" 
    // <snip> 
        "\x00\x49\x45\x4e\x44\xae\x42\x60\x82"; 
FILE *fp = fopen("mona.png","wb"); 
fputs(mona,fp); 
fclose(fp); 
return 0; 
} 

Répondre

13

fputs est supposé écrire une chaîne terminée par un caractère nul. Il s'arrêtera une fois qu'un '\0' est détecté. You should use fwrite pour écrire des données binaires.

fwrite(mona, 1, sizeof(mona), fp); 
2

Utilisation fwrite au lieu de fputs.

fputs est d'écrire des données de caractères (pas binaires) dans des fichiers.

1

Vous devez utiliser fwrite ET le drapeau binaire sur fopen, comme

fopen("blah.bin","wb"); 

Si vous n'utilisez pas "b", tous vos fichiers-opérations fonctionnent en texte modus (standard) aussi avec fwrite .

Questions connexes