【发布时间】:2015-08-26 15:38:03
【问题描述】:
我在 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() 函数中,一切都很好,但是在main() 中,当我尝试从mystudent->name.s 打印出学生姓名时,它只是垃圾数据。我不明白为什么会发生这种情况,因为它在addstud() 函数中显然很好,并且两个指针都指向同一个内存地址:( 谁能帮我解释一下我在这里做错了什么?谢谢!
【问题讨论】:
-
sb->name.s = buf;buf 在堆栈上,您需要复制字符串