Перед обновлением поста объявление элемента данных title
структуры
typedef struct {
char *title[50];
float price;
} Book;
неверно (в контексте программы не имеет смысла). Структура должна выглядеть так:
typedef struct {
char title[50];
float price;
} Book;
То есть каждая книга имеет одно название, а не 50 указателей на названия.
И вместо этого оператора
*(lib+i)->title = title;
у вас есть написать, по крайней мере, как
#include <string.h>
//...
strcpy( ( lib+i )->title, title );
Что касается вашего вывода, тогда вы назначили адрес того же заголовка локальной переменной первому указателю массива
char *title[50];
каждого элемента динамически выделяемый массив.
Обратите внимание на то, что вы должны освобождать динамически выделяемую память, когда она больше не используется. Например,
free( lib );
Изменить: одно из требований в моем задании - название книги должно иметь тип char *
После обновления сообщения в В этом случае определение структуры должно выглядеть так:
typedef struct {
char *title;
float price;
} Book;
И вам нужно будет динамически выделить память для введенного заголовка объекта структуры.
Это можно сделать, например, следующим образом . Я предполагаю, что вы хотите использовать указатели вместо оператора подстрочного индекса.
( lib + i )->title = malloc( strlen( title ) + 1 );
strcpy( ( lib + i )->title, title );
В этом случае перед освобождением выделенного массива, на который указывает указатель lib, вам необходимо также освободить каждый выделенный массив символов, например,
for ( int i = 0; i < n; i++ )
{
free( ( lib + i )->title );
}
free( lib );