1

以下代码运行良好,除了我的输出文件不包含整数 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);
}
4

5 回答 5

4

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

您可以使用 ASCII 写数字fprintffprintf(fp, "%d", x)

于 2011-04-13T11:44:54.240 回答
1

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

要以 ASCII 书写,请fprintf改用。

于 2011-04-13T11:45:06.813 回答
0

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

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

于 2011-04-13T11:45:38.937 回答
0

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

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

于 2011-04-13T11:45:47.817 回答
0

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

于 2011-04-13T11:46:01.763 回答