вызывающий массив символов в структуре - PullRequest
0 голосов
/ 01 апреля 2011
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 ...... не работал Я не понимаю почему ???????

нужно ли динамически выделять память сотруднику структуры, а затем назначать ее это е-> имя

Ответы [ 3 ]

3 голосов
/ 01 апреля 2011

Да, вы должны выделить хранилище, прежде чем сможете получить к нему доступ.В противном случае вы просто будете указывать на какое-то случайное место в памяти.

Попробуйте это:

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;
}
2 голосов
/ 01 апреля 2011

вы должны использовать

scanf("%s",e->name)  // name is itself an array, so need not to use &
1 голос
/ 01 апреля 2011

Да, вы должны выделить память для того, что указывает в первую очередь.Что-то вроде:

e = (emp_t*) malloc(sizeof(emp_t));

Также, как некоторые другие отмеченные выше (и просто для полноты), вы должны использовать e->name вместо &e->name), в качестве имени массива (name) неявно является адресом своего первого байта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...