在C中读写二进制文件

时间:2015-05-13 11:00:15

标签: c binaryfiles fread bin

首先,我在这里读到:

  1. reading-binary-files-in-c
  2. binary-file-reading-writing-in-c
  3. 我正在尝试在C中读取二进制文件。并编写了这段代码:

    struct emp
    {
        char name[20];
        char surname[20];
        char no[20];
        char aldigiDersKodu[20];
    };
    struct emp e;
    ***
    ***
    ***
    FILE *fp;
    fp = fopen("student.bin","rb+");
    if(fp == NULL)
    {
        fp = fopen("student.bin","wb+");
        if(fp == NULL)
        {
            printf("File is not opening.");
            exit(1);
        }
    }
    ***
    ***
    ***
    fseek(fp, 0, SEEK_END);
    
    another = 'y';
    while(another == 'y')
    {
         printf("\nOgrencinin Adi: ");
         scanf("%s",e.name);
         printf("\nOgrencinin Soyadi: ");
         scanf("%s", &e.surname);
         printf("\nOgrencinin Numarasi: ");
         scanf("%s", &e.no);
    
         fwrite(&e, sizeof(struct emp), 1, fp);
    
         printf("\nYeni Ogrenci Ekle(y/n)\n");
         fflush(stdin);
         another = getche();
    }
    ***
    ***
    ***
    

    我正在向学生添加课程名称和课程代码(例如:数学,M1)。(相同方法)

    此读取二进制文件代码:

    scanf("%s", no);
    rewind(fp);
    while(fread(no, sizeof(struct emp), 1, fp) == 1)
    {
         printf("\n%s %s %s %s", &e.name, &e.surname, e.no, &e.aldigiDersKodu);
    }
    

    当我阅读二进制文件时,我在控制台中看起来像

    enter image description here

    我的bin文件看起来像这样:

    AytuncøA'v:A'vXÿæ¯Yalcinkaya°@Àþ(1,Aytunc,Yalcinkaya,M'víE'v°@“ÿ(@OsmanøA'v:A'vXÿæ¯Villikaya°@Àþ(2) (ÿÿ(r'vô@_Ùþÿÿÿ:A'vÍE'v°@“ÿ(@

    但我想在控制台屏幕中查看此输出:

    1 Aytunc Yalcinkaya M

1 个答案:

答案 0 :(得分:0)

首先,当您保存到文件结构时,您可以/必须阅读结构。

while(fread(&e, sizeof(struct emp), 1, fp) == 1)

其次你必须将一个poiter传递给%s格式然后

printf("\n%s %s %s %s", e.name, e.surname, e.no, e.aldigiDersKodu);

或者至少

printf("\n%s %s %s %s", &e.name[0], &e.surname[0], &e.no[0], &e.aldigiDersKodu[0]);