C- Netbean IDE上的一系列字符串中的不兼容的指针类型警告



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

这是我使用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]

  2. 传递" addbook"的参数2
  3. 预期的'book *',但论点是类型'int'

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

p/s:我使用NetBean IDE。

这些警告是否认为是错误?我

在C中,大多数警告如果被忽略,则会迟早会导致或多或少的致命行为。在这种情况下,臭名昭著的不确定行为被调用,这意味着从那一刻起可能会发生。该代码可能有时仅能使用,有时甚至是星期一或...

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

这样做更改

 int n, list[1000];

 int n;
 book list[1000];     

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

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

警告通常也表示您执行一些不安全或不确定的操作 - 事实的起作用只是您很幸运。因此:将警告视为错误。

我怀疑它起作用的原因是因为您碰巧将指针分配给了一些记忆,而您很幸运能起作用。

相关内容

最新更新