Вы пытаетесь вернуть struct book *
, но вы объявили функцию как возвращающую int
(или int *
).Это не может работать.
Вам необходимо изменить тип возвращаемого значения на struct book *
.Затем удалите ненужный параметр p_book
и преобразуйте его в локальную переменную: он бесполезен.Результат выглядит следующим образом:
struct book *init_book(const char *p_id, const char *p_title, const char * p_author, struct date p_release) {
struct book *p_book = malloc(sizeof *p_book);
for (int i = 0; i < 10; i++) {
p_book->id[i] = p_id[i];
}
p_book->title = malloc(strlen(p_title) + 1);
p_book->author = malloc(strlen(p_author) + 1);
strcpy(p_book->title, p_title);
strcpy(p_book->author, p_author);
p_book->release_date = p_release;
return p_book;
}
(Я также исправил ошибки в выделении и копировании строки в вашем коде: ваш код не выделил достаточно места, но распределение все равно было утечкой, так как вывместо копирования содержимого перемещены указатели.)
И он называется так:
struct book *p_book = init_book("000000009", "Harry Potter and the Philosopher's Stone", "J. K. Rowling", a1date);
if (p_book) {
printf("Initialization succeeded\n");
printf("%s\n", a1.title);
} else {
printf("Initialization failed\n");
}