我正在编写一个程序来使用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);
}
所以当我尝试跑步时,它起作用了。但是,编译器向我展示了两个警告:
警告:从不兼容的指针类型[ - wincompatible-pointer-types]
传递" addbook"的参数2预期的'book *',但论点是类型'int'
我的问题是:这些警告是否被视为错误?如果是,正确的解决方案是什么?如果没有,为什么编译器显示它?
p/s:我使用NetBean IDE。
这些警告是否认为是错误?我
在C中,大多数警告如果被忽略,则会迟早会导致或多或少的致命行为。在这种情况下,臭名昭著的不确定行为被调用,这意味着从那一刻起可能会发生。该代码可能有时仅能使用,有时甚至是星期一或...
因此,将这些警告认真对待并相应地修复您的代码。
这样做更改
int n, list[1000];
为
int n;
book list[1000];
这些警告是否认为是错误?如果是,正确的解决方案是什么?如果没有,为什么编译器显示它?
您应该将警告视为错误。为什么?今天的编译器可能会发出一些不安全操作的警告,但下一个编译器可能会将其视为错误。
警告通常也表示您执行一些不安全或不确定的操作 - 事实的起作用只是您很幸运。因此:将警告视为错误。
我怀疑它起作用的原因是因为您碰巧将指针分配给了一些记忆,而您很幸运能起作用。