C/C++

Почему не правило выводит "key" (СИ) ?

код -> https://onlinegdb.com/aQOm4zcL8
вроде у указателями не на путала так почему ?
Обычно в чистом Си строки сохраняют в статических массивах внутри структур. И если под структуру выделяется память (calloc или malloc), то все эти массивы так же будут в динамической области, не вызовут переполнения стека и удалятся при удалении структуры.
т.е. char car_vendor[15]{}; и т.д.
Но даже в этом случае нужно следить за тем, чтобы ненароком не выходить за пределы установленной длины. Это может переписать соседние поля структуры или сломать стек, если структура выделена в стек для каких либо действий над ней.

в случае, если у вас указатели - то они должны указывать на некую выделенную вами область, в которой можно разместить строки.
char *car_vendor = NULL пустой указатель
после выделения памяти под структуру нужно дополнительно делать следующие для всех этих указателей
car_vendor = calloc (lenght максимально длинного названия + 1 чтобы влез терминатор);
и только после этого можно копировать по этому указателю строку не превышающую выделенную длину.
А при удалении структуры - вначале нужно высвободить все эти указатели
free(car_vendor)
и только потом удалить саму структуру, иначе будет утечка памяти.
Олег Плотников
Олег Плотников
51 416
Лучший ответ
У вас по указателям в структуре в момент инициализации полей должна выделятся память. Но лучше каждый массив структуры сделать статическим, так ваш список будет проще сохранять в бинарный файл. С целью экономии памяти рекомендую поля структуры ранжировать по размеру занимаемой памяти от меньшего к большему, это касается и указателя на структуру (sizeof вам в помощь). Вот здесь имеется двунаправленный список: https://pastebin.com/eVYTS7QK там подсмотрите как он организован.