编译以下代码编译器时显示警告


#include<stdio.h>
struct employee
{
char name[25] ;
int id ;
int age ;
float inc ;
} b[3] ;
int main()
{
int i ;
for(i = 0 ; i < 3 ; i++)
{
printf("Enter name , id , age , inc of employee %d :- ",i+1) ;
scanf("%s%d%d%f",&b[i].name,&b[i].id,&b[i].age,&b[i].inc) ;
}
printf("n") ;
for(i = 0 ; i < 3 ; i++)
{
printf("%s%d%d%fn",b[i].name,b[i].id,b[i].age,b[i].inc) ;
}
return 0 ;
}

编译时的输出:

警告:格式 '%s' 需要类型为 'char' 的参数,但参数的类型为 'char ()[25]' [-Wformat=] scanf("%s%d%d%f">

,&b[i].name,&b[i].id,&b[i].age,&b[i].inc) ;

如何解决警告?

&b[i].name是指向char数组的指针(它是一个char (*)[25]),但scanf想要一个指向char(char*)的指针。

您需要传递指向数组第一个元素的指针。

你可以用&b[i].name[0]显式地获得它,或者只用b[i].name依赖隐式转换

无需&b[i].name,因为这已经分解为指向第 0 个元素的指针

相关内容

  • 没有找到相关文章

最新更新