Передача char * в структуру - PullRequest
0 голосов
/ 30 апреля 2019

Итак, у меня есть структурный член char *, и я хочу инициализировать его после выделения памяти узла. Однако этот метод вызывает ошибку Seg Fault.Заметка.ДА, я хочу infoPtr.Извините за любые синтаксические ошибки, это не проблема, которую я пытаюсь решить.ВСЕ, что я хочу, это правильно передать строку char в имя.

struct Info{
    char *name;
}
typedef struct Info *infoPtr;
int main(void){
    enter("google");
}
void enter(char *name){
    infoPtr* info=(infoPtr)malloc(sizeof(infoPtr));
    info->name=strup(name);
}

1 Ответ

4 голосов
/ 30 апреля 2019

Здесь

typedef struct Info *infoPtr;

infoPtr относится к типу struct Info*, это

infoPtr* info=(infoPtr)malloc(sizeof(infoPtr)); /* info will be of struct Info** type */

должно быть

infoPtr info = malloc(sizeof(*infoPtr)); /* typecasting is not required */

Примечание, его не считаюткак хорошая практика для typedef указателя, прочитайте Это хорошая идея, чтобы печатать указатели?

Также здесь

info->name=strup(name);

вы хотели использовать strdup() вместо strup() например,

info->name=strdup(name);

Приходите к вашему вопросу ВСЕ, что я хочу, это правильно передать строку символа в имя? Да, как вы передали аргумент enter()правильный, кроме typedefing struct указатель .И передавая строковый литерал google как

enter("google");

и определяя enter() как

void enter(char *name){ /* Its correct */
  /* play with name */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...