typedef struct employee
{
int age;
char name[30];
} emp_t;
emp_t * e;
int main( )
{
printf("\nName : ");
scanf("%s", &e->name);
return 0;
}
此代码编译但是当我尝试输入我的名字时 例如“ mukesh ”它会导致错误 有人可以解释为什么会这样 在结构中我使用char name []以及char * name ......都没有用 我不明白为什么???????
我是否需要动态地为结构员工分配内存,然后分配它 它到e->名称
答案 0 :(得分:3)
是的,您必须先分配存储才能访问它。否则你只会指向内存中的一些随机位置。
试试这个:
typedef struct employee
{
int age;
char name[30];
} emp_t;
emp_t * e;
int main( )
{
e = malloc(sizeof(emp_t));
printf("\nName : ");
scanf("%s", e->name);
return 0;
}
答案 1 :(得分:2)
你应该使用
scanf("%s",e->name) // name is itself an array, so need not to use &
答案 2 :(得分:1)
是的,您必须先为e指向的内容分配内存。类似的东西:
e = (emp_t*) malloc(sizeof(emp_t));
此外,正如上面提到的其他一些(并且只是为了完整性),您应该使用e->name
而不是&e->name
),因为数组的名称(name
)是隐式的第一个字节的地址。