C/C++

Си заголовочный файл, немного бы пролить свет

Написал пол программы со своими структурами и заголовочными файлами и вроде бы все понимаю. Но как бы там ни было, в программе есть "не мой" заголовочный файл. И там я теряюсь.

В общем, как я понимаю, логика моих действий должна быть такая. Создать массив структур, как-то при помощи этой функции 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.
ЮК
Юрий Кащеев
54 985
Лучший ответ
Данные вопросы нужно задавать пейсателю библиотеки
Угадать где хранится массив книг по данному .h файлу - не получится
Угадать копируются ли "строки" при выполнении add_book и освобождается память при remove_book ??
А BookArray используется для возврата запросов ( как угадать сколько книг подошли под "фильтр" ? )
Александр Сибирцев А нет библиотеки, я так понимаю нужно просто загнать книги в txt файл и с этим работать.
Задавать вопросы писателю библиотеки не получится, дали заголовочный файл и иисьработай как хочешь...

мне бы понять как создать массив arr[100] , отправить туда пару книг. и после следующего выполнения программы если мы захотим добавить книгу новую в массив понять с какого индекса ее туда добавлять. потому что если делать так sizeof(arr)/sizeof(arr[0]) - число сто, хотя на самом деле в массиве только 2 книги
" Ну например как в Java есть функция append() или это Python, столько языков прогр одновременно учить"

Ну так и делай на Java. Или на Python. Или на C++, в котором в отличие от Си нет всех этих проблем с выделением памяти и т. д. Зачем ты сразу столько языков одновременно-то учишь.

Я бы понял это твое "дали заголовочный файл на Си", ну это еще ладно, если человек только Си учит. Но то, что при этом ты еще и Java и Python учишь, вообще поставило в тупик.
***777*** ***777***
***777*** ***777***
92 464
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, по другому программист никак не сможет узнать, сколько ему вернули книг
Eugen Art
Eugen Art
36 956
Александр Сибирцев 1) Ну типа struct Book book[1] и так далее
Если из внешнего только данный инклуд-файл - то нужно реализовывать саму библиотеку самостоятельно по данному интерфейсу.

1. "Как создается книга, нужно ли всегда менять имя структуры при создании новой книги" - как реализуешь, так и создаётся, имя менять не нужно;
2. "в полях структуры есть динамический массив char* title; - нужно ли под них выделять память?" - да, при создании новой книги и удалять при удалении.
3. "вот мы загрузили книгу в массив, как узнать какие ячейки заполнены книгами и добавить новую книгу в свободную ячейку." - все заполнены. добавлять - в зависимости от выбранной структуры хранения.
4. "struct BookArray зачем структура эта там и нафига переменная length." - выше ответили, для выдачи результата.