Я читаю книгу C Программирование Абсолютного руководства для новичков Грег Перри и Дин МиллерПочему компилятор дает мне предупреждение «несовместимого типа указателя»?
В главе 27 в подтеме под названием «Ввод данных в структурные переменные» предоставляется следующий код.
Когда я пытаюсь запустить код, я получаю довольно много ошибок. Первый из которых:
27ex2.c:23:14: warning: incompatible pointer types assigning to
'struct bookinfo *' from 'struct bookInfo *'
[-Wincompatible-pointer-types]
books[ctr] = (struct bookInfo*)malloc(sizeof(struct bookInfo));
Вот код.
#include "bookinfo.h"
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ctr;
struct bookinfo * books[3]; // Array of three structure variables
// Get the information about each book from the user
for (ctr = 0; ctr < 3; ctr++)
{
books[ctr] = (struct bookInfo*)malloc(sizeof(struct bookInfo));
printf("What is the name of the book #%d?\n", (ctr+1));
gets(books[ctr]->title);
puts("Who is the author? ");
gets(books[ctr]->author);
puts("How much did the book cost? ");
scanf(" $%f", &books[ctr]->price);
puts("How many pages in the book? ");
scanf(" %d", &books[ctr]->pages);
getchar(); //Clears newline input to keep things clean for
// next round
}
// Print a header line and then loop through and print the info
printf("\n\nHere is the collection of books:\n");
for (ctr = 0; ctr < 3; ctr++)
{
printf("#%d: %s by %s", (ctr+1), books[ctr]->title, books[ctr]->author);
printf("\nIt is %d pages and costs $%.2f", books[ctr]->pages, books[ctr]->price);
printf("\n\n");
}
return(0);
}
Может ли кто-нибудь сказать мне, почему я получаю эту ошибку?
Вот заголовок на всякий случай, если это необходимо.
// This header file defines a structure for information about a book
struct bookInfo {
char title[40];
char author[25];
float price;
int pages;
};
Заранее благодарим за помощь. Я учусь снова использовать stackoverflow, поэтому, пожалуйста, скажите мне, если мой пост не будет следовать рекомендациям сообщества, и я отрегулирую его соответствующим образом.
'bookinfo'! =' BookInfo' –
__Этот вопрос был вызван проблемой, которая больше не может быть воспроизведена или простой типографской ошибкой. Хотя подобные вопросы могут быть по-теме здесь, этот вопрос был разрешен таким образом, который вряд ли поможет будущим читателям. Этого часто можно избежать путем выявления и тщательного изучения кратчайшей программы, необходимой для воспроизведения проблемы до публикации –