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