2017-01-15 3 views
-2

Я читаю книгу 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, поэтому, пожалуйста, скажите мне, если мой пост не будет следовать рекомендациям сообщества, и я отрегулирую его соответствующим образом.

+7

'bookinfo'! =' BookInfo' –

+1

__Этот вопрос был вызван проблемой, которая больше не может быть воспроизведена или простой типографской ошибкой. Хотя подобные вопросы могут быть по-теме здесь, этот вопрос был разрешен таким образом, который вряд ли поможет будущим читателям. Этого часто можно избежать путем выявления и тщательного изучения кратчайшей программы, необходимой для воспроизведения проблемы до публикации –

ответ

7

Поскольку компилятор чувствителен к регистру, а bookinfo и bookInfo - это разные вещи.

Смежные вопросы