Написал пол программы со своими структурами и заголовочными файлами и вроде бы все понимаю. Но как бы там ни было, в программе есть "не мой" заголовочный файл. И там я теряюсь.
В общем, как я понимаю, логика моих действий должна быть такая. Создать массив структур, как-то при помощи этой функции int add_book(struct Book book); добавить туда книги. После записать этот массив в файл (базу данных) чтобы при запуске след программы книги сохранялись и можно было бы их выгрузить обратно в массив структур.
Что непонятно:
1) Как создается книга, нужно ли всегда менять имя структуры при создании новой книги?
2) в полях структуры есть динамический массив char* title; - нужно ли под них выделять память?
3) Главный вопрос - вот мы загрузили книгу в массив, как узнать какие ячейки заполнены книгами и добавить новую книгу в свободную ячейку. Ну например как в Java есть функция append() или это Python, столько языков прогр одновременно учить, в голове каша... =(((
4) И последний - struct BookArray зачем структура эта там и нафига переменная length
Вот, за раннее спасибо. Кода другого нет, просто дали заголовочный файл и мучайтесь сами... подумали они...

1) Менять имя структуры не надо.
Обращение к разным книгам идёт через нумерацию, как в массиве.
2) Надо не только выделять память для книги, но и в конце программы в деструкторе и в функции remove_book() высвободать память. И следить, чтобы память дважды не удалялась.
3) Можно добавить заголовочный файл string.h в файл реализации.
И использовать из него функцию strlen(char*), которая проверяет длину текстовой строки. Собственно, она считает количество символов до символа '\0'. Так можно узнать какие книги ещё не вписаны в структуру.
4) length указывает количество книг. Ведь первый параметр struct Book* array. Звёздочка говорит о том, что там может быть несколько элементов array.
Данные вопросы нужно задавать пейсателю библиотеки
Угадать где хранится массив книг по данному .h файлу - не получится
Угадать копируются ли "строки" при выполнении add_book и освобождается память при remove_book ??
А BookArray используется для возврата запросов ( как угадать сколько книг подошли под "фильтр" ? )
" Ну например как в Java есть функция append() или это Python, столько языков прогр одновременно учить"
Ну так и делай на Java. Или на Python. Или на C++, в котором в отличие от Си нет всех этих проблем с выделением памяти и т. д. Зачем ты сразу столько языков одновременно-то учишь.
Я бы понял это твое "дали заголовочный файл на Си", ну это еще ладно, если человек только Си учит. Но то, что при этом ты еще и Java и Python учишь, вообще поставило в тупик.
1) В структуре Book нужно исправить char* title и char* authors на массивы, например, char title[125], char authors[125]. Иначе туда ничего не сохраняется, это сейчас просто константные ссылки.
2) Структура BookArray не нужна. Просто сохраняешь в файл и извлекаешь из файла блоки данных, размером sizeof(struct Book).
3) Данные в структурах могут храниться любые, хоть одинаковые, ибо работаешь с ними как с массивом, общий размер элементов которого известен.
1) не совсем понял
имя структуры - это Book, как ты собираешься его менять?
2) да, и освобождать тоже, и в BookArray массив array тоже придётся выделять и освобождать - причём выделяться он должен "внутри" библиотеки, а освобождаться уже пользователем, что не есть хорошо имхо, но что дали, с тем и работаем
3) можно хранить числовую переменную с количеством элементов массива
4) см. 3, по другому программист никак не сможет узнать, сколько ему вернули книг
Если из внешнего только данный инклуд-файл - то нужно реализовывать саму библиотеку самостоятельно по данному интерфейсу.
1. "Как создается книга, нужно ли всегда менять имя структуры при создании новой книги" - как реализуешь, так и создаётся, имя менять не нужно;
2. "в полях структуры есть динамический массив char* title; - нужно ли под них выделять память?" - да, при создании новой книги и удалять при удалении.
3. "вот мы загрузили книгу в массив, как узнать какие ячейки заполнены книгами и добавить новую книгу в свободную ячейку." - все заполнены. добавлять - в зависимости от выбранной структуры хранения.
4. "struct BookArray зачем структура эта там и нафига переменная length." - выше ответили, для выдачи результата.
Задавать вопросы писателю библиотеки не получится, дали заголовочный файл и иисьработай как хочешь...
мне бы понять как создать массив arr[100] , отправить туда пару книг. и после следующего выполнения программы если мы захотим добавить книгу новую в массив понять с какого индекса ее туда добавлять. потому что если делать так sizeof(arr)/sizeof(arr[0]) - число сто, хотя на самом деле в массиве только 2 книги