2010-11-28 22 views
-2

可能性の重複:
C Programming - File - fwritefwriteに問題があり、バイナリファイルに書き込めません!

、私はちょうどバイナリFILAのmd3.dat上の任意の番号を印刷することはできません.... >

int main(void) 
{ 

    FILE *Archivo; 
    int proba=5; 

    Archivo=fopen("md3.dat", "ab+"); 
    fwrite(&proba, sizeof(int), 1, Archivo); 
    fclose(Archivo); 
    printf("Bye!\n\n"); 
} 

が含まれます助けてください!

+0

上記のコードを試したらどうなりますか? –

+2

一見して見ることができる問題:ArchivoポインタをNULLと比較することでfopen()が成功したかどうかをチェックしません。 dupeの場合は – thkala

+0

-1です。 OPはすでに同じ質問をしました[ここ](http://stackoverflow.com/questions/4282823/c-programming-file-fwrite/4282837#4282837) – SiegeX

答えて

1

これを試してみてください:

Archivo = fopen("md3.sat", "wb+"); 
fseek(Archivo, 0, SEEK_END); 
fwrite(&proba, sizeof(int), 1, Archivo); 

このファイルの最後にあなたのint値を書き込む必要があります。また、関数の戻り値をチェックする必要があります。覚えておいてください:あなたはCです!

int written; 
Archivo = fopen("md3.sat", "wb+"); 
if (Archivo != NULL) { 
    fseek(Archivo, 0, SEEK_END); 
    written = fwrite(&proba, sizeof(int), 1, Archivo); 
    printf("%d int values written!\n", written); 
} 
+0

違いがありますか? (異なるファイル拡張子を除いて) – Vlad

+0

大きな違いがあります:ファイルオープンモード 'ab +'と 'wb +'。 –

+0

@Vlad、ファイルオープンモードも異なります。 –

3

私はOPの出力は、おそらく空白を示しバイト5,0,0,0(すべての非印字可能文字)であるときに混乱する、ファイルをfprintfとして動作し、ASCII 10進文字列を書くことfwriteを期待していると思いますエディタで開くか、catを使用して端末に出力します(DOSではtype)。

テキストを書きたい場合は、fprintfを使用してください。

+0

次に、開いているときに空白を表示すると、5がバイナリに書き込まれていることをどのように知っていますか?私はただの素人です... – Jujitsu2

+0

@ Jujitsu2 - あなたのシェルのファイルサイズを確認してください。それは4バイトでなければなりません(あなたのシステムで 'sizeof(int)'が4であると仮定し、あなたはファイルに 'int'を書いただけです)。 LinuxやOS Xの場合、 'xxd'コマンドを使ってバイナリの内容をチェックします。おそらく4バイトの5,0,0、0でなければなりません。 –

+0

合意しました。 http://stackoverflow.com/questions/4282823/c-programming-file-fwrite/4290646#4290646)OPがこの質問をした最後の時間。 – caf

関連する問題