Страницы

Поиск по вопросам

пятница, 28 февраля 2020 г.

Заполнение структуры С

#c #struct #malloc


Суть такая:
имеется структура:

typedef struct {
    char * brand;
    int year;
} vehicle;


Выделяю память под неё так:

vehicle * car = malloc(sizeof(vehicle));


Если делать так:

car->brand = "Dodge";
car->year = 2007;
printf("%s %d", car->brand, car->year);


То всё работает, но если попытаться вводить с клавиатуры так:

printf("\nВведите марку авто: ");
scanf("%s", car->brand);
printf("\nВведите год выпуска авто: ");
scanf("%d", &car->year);


То будет 

Segmentation fault: 11


После ввода строки.

Изучаю только, просьба не кидаться, ибо разбираюсь пока в указателях.
    


Ответы

Ответ 1



printf("\nВведите марку авто: "); scanf("%s", car->brand); Вы читаете куда-то в какое-то неопределенное место в памяти... Вам нужно выделить место заранее - или, например, typedef struct { char brand[50]; int year; } vehicle; или выделять динамически - car->brand = malloc(50); scanf("%s", car->brand); Понятно, что 50 я взял "с потолка", вы должны брать разумные значения и при считывании строки обеспечить отсутствие переполнения буфера. Так что лучше воспользоваться функцией fgets, тем более что она считывает любую строку - в том числе с пробелами, чего не обеспечивает ваш способ ввода.

Комментариев нет:

Отправить комментарий