У меня есть следующие программы в C:C программирование - почему данные мусора внутри моей структуры?
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct str{
char * s;
int len;
}string;
typedef struct stud{
unsigned int id;
string name;
char gender;
}student;
student* addstud(const int id, const char name[64], const char gender);
student* addstud(void){
char buf[64];
struct stud *sb;
sb = (struct stud*)malloc(sizeof(struct stud));
printf("Enter student ID:\n");
scanf("%d",&sb->id);
printf("Enter student name:\n");
scanf("%s", buf);
sb->name.s = buf;
sb->name.len = (int)strlen(buf);
printf("Enter student gender:\n");
scanf(" %c", &sb->gender);
printf("Student ID: %d, name: %s, gender: %c\n", sb->id, sb->name.s, sb->gender);
return sb;
}
int main(){
student *mystudent;
mystudent=addstud();
printf("Student ID: %d, name: %s, gender: %c\n", mystudent->id, mystudent->name.s, mystudent->gender);
getchar();
return 0;
}
В функции addstud()
, Everthing это хорошо, но в main()
, когда я пытаюсь напечатать имя студента из mystudent->name.s
он просто мусор данных. Я не понимаю, почему это могло произошло, как это было явно хорошо в addstud()
функции и оба указателя указывают на тот же адрес памяти :(Может кто-нибудь пожалуйста, лоскуток некоторый свет, что я сделал неправильно здесь, пожалуйста? Спасибо!
'sb-> NAME.S = buf; 'buf находится в стеке, вам нужно опустить строку –
[не набрасывать возвращаемое значение' malloc() '] (https://stackoverflow.com/questions/605845/do-cast- результат-of-malloc) –