编译下面的代码编译器显示警告

时间:2017-11-28 20:10:55

标签: c

#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%f\n",b[i].name,b[i].id,b[i].age,b[i].inc) ;
  }
  return 0 ;
}

编译时的输出:

  

警告:格式'%s'需要'char '类型的参数,但参数的类型为'char()[25]'[ - Wformat =]        scanf(“%s%d%d%f”,&amp; b [i] .name,&amp; b [i] .id,&amp; b [i] .age,&amp; b [i] .inc);

如何修复警告?

2 个答案:

答案 0 :(得分:3)

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

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

您可以使用&b[i].name[0]明确地获取该内容,也可以仅使用b[i].name

依赖隐式转换

答案 1 :(得分:2)

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