1

次のコードは正常に実行されますが、出力ファイルに整数10が含まれていませんが、VIMで開いたときに文字^ @ ^ @^@が含まれています。(Macで)テキストエディットで開くと、ファイルが空のように見えます。

私がここでどこが間違っているのか誰か知っていますか?

#include <stdio.h>
#include <stdlib.h>

#define MAX_LINE 256
#define MAX_NAME 30

int main() {
   FILE *fp;
   char fname[MAX_NAME] = "test1.dat"; 
   int x =10;
   int num= 0;

   if( (fp =fopen(fname, "w")) == NULL) {
      printf("\n fopen failed - could not open file : %s\n", fname);
      exit(EXIT_SUCCESS);
   }

   num= fwrite(&x, sizeof(int), 1, fp);
   printf("\n Total number of bytes written to the file = %d\n", num);

   fclose(fp);

   return(EXIT_SUCCESS);
}
4

5 に答える 5

4

You're writing binary data and expecting to see ASCII.

You could write the number in ASCII using fprintf: fprintf(fp, "%d", x)

于 2011-04-13T11:44:54.240 に答える
1

Your code is writing the binary representation of the four bytes 0x0000000a to the file, i.e. ^@^@^@\n

To write in ASCII, use fprintf instead.

于 2011-04-13T11:45:06.813 に答える
0

整数のバイナリバイトをファイルに書き込んだので、それが得られます。

テキストの「1」を表示する場合は、を使用しますsprintf。バイナリファイルは、テキストエディタでは空または奇妙に見えることがよくあります。

于 2011-04-13T11:45:38.937 に答える
0

バイナリデータを書き込んでいて、ASCIIを期待していますか?

フォーマットされたデータを書き込みたい場合は、fwrite()の代わりにfprintf()関数などを使用できます。

于 2011-04-13T11:45:47.817 に答える
0

ファイルをバイナリで開いているので、基本的には、数字の10ではなくASCII文字の10を書き込んでいます。実行する内容に応じて、テキストモードで開き、fprintf...を使用できます。

于 2011-04-13T11:46:01.763 に答える