在结构中调用字符数组

时间:2011-04-01 12:58:10

标签: c

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->名称

3 个答案:

答案 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)是隐式的第一个字节的地址。