Как записать элементы структуры сразу в файл, используя функцию fwrite()?

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

struct student{
    char *name;
    char *addr;
    int age;
   int clas;
 }*stu;

 int main()
 {
    FILE *fp;
    int choice,another;
    size_t recsize;
    size_t length;

   struct student *stu=(struct student *)malloc(sizeof(struct student));
   stu->name=(char *) malloc(sizeof(char)*20);
   stu->addr=(char*)malloc(sizeof(char)*20);

   recsize=sizeof(*stu);


           fp=fopen("student.txt","a+");
            if(fp==NULL)
               {
                 fp=fopen("student.txt","w+");
                 if(fp==NULL)
                  {
                    printf("cannot open the file");
                    exit(1);
                  }  
                }

                do
                 {
                   fseek(fp,1,SEEK_END);
                   printf("Please Enter student Details\n");

                   printf("Student Name: ");
                   scanf("%s",stu->name);

                    printf("Address: ");
                    scanf("%s",stu->addr);

                    printf("Class: ");
                    scanf("%s",&stu->clas);

                    printf("Age: ");
                    scanf("%s",&stu->age);                     

                    fwrite(stu,recsize,1,fp);

                    printf("Add another Enter 1 ?\n");
                    scanf("%d",&another);
                   }while(another==1);
                  fclose(fp);
        free(stu);


   }

У меня есть код на C, который имеет структуру Student. Я пытаюсь получить все значения членов структуры от пользователя. Память выделена для структуры и двух членов *name и * addr. Когда я пытаюсь записать эти значения с помощью функции fwrite() в файл Student.txt, он показывает случайный вывод (ཀའ ㌱ 䔀 8 䵁 ཀའ ㈱ 䔀 1 䵁), как это в файле, и он не находится в читаемой форме. Пожалуйста, предоставьте мне лучший способ записать элементы структуры в файл, используя функцию fwrite().

1 ответ

Вам нужно использовать %d вместо %s за ints

printf("Class: ");
scanf("%s",&stu->clas);

printf("Age: ");
scanf("%s",&stu->age);

должно быть

printf("Class: ");
scanf("%d",&stu->clas);

printf("Age: ");
scanf("%d",&stu->age);

И, как отметил @David Hoelzer в комментариях: вы пишете значение указателей, а не то, что они содержат, меняйте

struct student{
    char *name;
    char *addr;

в

struct student{
    char name[20];
    char addr[20];

и удалите эти строки:

stu->name=(char *) malloc(sizeof(char)*20);
stu->addr=(char*) malloc(sizeof(char)*20);
Другие вопросы по тегам