整数不写入C中的文件

时间:2011-04-13 11:42:30

标签: c fwrite

以下代码运行正常,但我的输出文件不包含整数10,而是在VIM中打开它时的字符^ @ ^ @ ^ @。如果我在textedit(在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);
}

5 个答案:

答案 0 :(得分:4)

您正在编写二进制数据并希望看到ASCII。

您可以使用fprintffprintf(fp, "%d", x)

以ASCII格式编写数字

答案 1 :(得分:1)

您的代码正在将四个字节0x0000000a二进制表示写入文件,即^@^@^@\n

要用ASCII编写,请改用fprintf

答案 2 :(得分:0)

您将整数的二进制字节写入您的文件,这就是您所拥有的。

如果您想查看文字“1”,请使用sprintf。二进制文件在文本编辑器中通常看起来是空的或奇怪的。

答案 3 :(得分:0)

您正在编写二进制数据并期待ASCII?

如果您希望编写格式化数据,可以使用例如fprintf()函数而不是fwrite()。

答案 4 :(得分:0)

你打开二进制文件,所以基本上你写的是ascii字符10,而不是数字10。 根据您的要求,您可以在文本模式下打开,使用fprintf ...