#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, который имеет структуру Студент. Я пытаюсь получить все значения элементов структуры от пользователя. Память распределена для структуры и двух элементов * name и * addr. когда я пытаюсь записать эти значения, используя функцию fwrite() в файле Student.txt, он показывает случайный вывод (ཀའ ㌱ 䔀 8 䵁 ཀའ ㈱ 䔀 1 䵁), как это в файле, и это не в читаемой форме. Пожалуйста, предоставьте мне лучший способ написать элементы структуры в файле, используя функцию fwrite().Как написать элементы структуры сразу в файле с помощью функции fwrite()?
Поскольку вы пишете значение указателей, а не то, что они содержат. Вы не сможете «переписать» эту структуру таким образом, если вы не измените ее на распределение (массив) с установленным размером. –
'scanf ("% s ", & stu-> clas);' 'scanf ("% s ", & stu-> age);' вы записываете строки в контейнеры int, потенциально повреждая память –
@DavidHoelzer, возможно ли это написать какой указатель содержит? Я знаю, что мой код будет работать, если * имя изменено на имя [20], а * addr изменено addr [20]. –