Целые числа не записывают в файл в C - PullRequest
1 голос
/ 13 апреля 2011

Следующий код работает нормально, за исключением того, что мой выходной файл не содержит целое число 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 ]

4 голосов
/ 13 апреля 2011

Вы пишете двоичные данные и ожидаете увидеть ASCII.

Вы можете написать число в ASCII, используя fprintf: fprintf(fp, "%d", x)

1 голос
/ 13 апреля 2011

Ваш код записывает в файл двоичное представление четырех байтов 0x0000000a в файл, то есть ^@^@^@\n

.*

0 голосов
/ 13 апреля 2011

Вы открываете свой файл в двоичном формате, поэтому вы пишете символ ascii 10, а не номер 10. В зависимости от того, что вы хотите сделать, вы можете открыть в текстовом режиме, используйте fprintf ...

0 голосов
/ 13 апреля 2011

Вы пишете двоичные данные и ожидаете ASCII?

Если вы хотите записать отформатированные данные, вы можете использовать, например, функция fprintf () вместо fwrite ().

0 голосов
/ 13 апреля 2011

Вы записали двоичные байты целого числа в свой файл, так что вот что у вас есть.

Если вы хотите увидеть текстовое «1», используйте sprintf. Двоичные файлы часто выглядят пустыми или странными в текстовых редакторах.

...