【问题标题】:Incompatible pointer type warnings in array of strings on Netbean IDENetbean IDE 上的字符串数组中出现不兼容的指针类型警告
【发布时间】:2016-12-11 12:06:05
【问题描述】:

我正在编写一个程序来使用 typedef 和 function 输入书籍信息。

这是我使用 typedef 的声明:

typedef struct {
    char name[1000], author[1000], publisher[1000], description[1000], ISBN[15];
} book;

添加图书信息的函数如下:

void addBook(int* n, book list[1000]) {
    printf("Enter number of book you want to add: ");
    fpurge(stdin);
    scanf("%d", n);
    int i;
    for (i = 0; i < *n; i++) {
        printf("Book title: ");
        fpurge(stdin);
        gets(list[i].name);
        printf("Book author: ");
        fpurge(stdin);
        gets(list[i].author);
        printf("Publisher: ");
        fpurge(stdin);
        gets(list[i].publisher);
        printf("Description: ");
        fpurge(stdin);
        gets(list[i].description);
        printf("ISBN: ");
        fpurge(stdin);
        gets(list[i].ISBN);
    }
}

最后是主要的:

int main(int argc, char** argv) {
    int n, list[1000];
    addBook(&n, list);
    return (EXIT_SUCCESS);
}

所以当我尝试运行时,它起作用了。但是,编译器向我显示了两个警告:

  1. 警告:从不兼容的指针类型 [-Wincompatible-pointer-types] 传递“addBook”的参数 2

  2. 预期为“book *”,但参数的类型为“int”

我的问题是:这些警告是否被视为错误?如果是,正确的解决方案是什么?如果不是,为什么编译器显示它?

P/s:我使用的是 Netbean IDE。

【问题讨论】:

    标签: c arrays function pointers typedef


    【解决方案1】:

    这些警告是否被视为错误?我

    在 C 中,大多数警告如果被忽略,迟早都会或多或少地导致致命的行为。在这种情况下,可能会调用臭名昭著的Undefined Behaviour,这意味着从那一刻起,任何事情都可能发生。该代码可能有效,也可能无效,有时仅有效,或仅在星期一或...

    因此,请认真对待这些警告并相应地修复您的代码。

    为此改变

     int n, list[1000];
    

    成为

     int n;
     book list[1000];     
    

    【讨论】:

    • 我按照您的建议进行了更改,但没有成功。事实上,编译器没有显示任何错误或警告,但它运行失败了。
    • @A.Pearce: "ran failed" 那么显然还有其他问题。由于您的故障报告非常糟糕(“它不起作用”),很遗憾我无法提供帮助。
    【解决方案2】:

    这些警告是否被视为错误?如果是,正确的解决方案是什么?如果不是,为什么编译器显示它?

    确实,您应该将警告视为错误。为什么?今天的编译器可能会针对某些不安全的操作发出警告,但下一版本的编译器可能会将其视为错误。

    警告通常也表示您正在执行一些不安全或未定义的操作 - 它有效的事实只是意味着您很幸运。所以:将警告视为错误。

    我怀疑它起作用的原因是因为您碰巧分配了一个指向某些内存的指针,而您很幸运它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多