#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, тем более что она считывает любую строку - в том числе с пробелами, чего не обеспечивает ваш способ ввода.
Комментариев нет:
Отправить комментарий