我不知道如何修复此警告,但特别是它出现在我的代码中的原因。在第一阶段,我的代码必须记录一些名字和姓氏,我使用结构。
#include <stdio.h>
typedef struct STUDENT{
char surname[50];
char name[50];
} student;
int main()
{
student a[30];
int aux;
int i,j,n;
printf("Number of students: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Surname:");
scanf("%s",&a[i].surname);
printf("Name:");
scanf("%s",&a[i].name);
}
return 0;
}
答案 0 :(得分:1)
请勿在字符串中使用&
,因为surname
已经采用scanf期望的格式。
printf("Surname:");
scanf("%s",a[i].surname);
printf("Name:");
scanf("%s",a[i].name);
另外,请阅读为什么必须在scanf
中设置字符串的长度。
答案 1 :(得分:1)
scanf
正在寻找指向char
的指针,但在你的代码中你已经有了这个
scanf("%s",&a[i].name);
a[i].name
是一个char
的数组,出于scanf
的目的,它与char *
相同,但是你得到指向它的指针,所以你以char (*)[50]
结束。只需删除不需要的&符号,您就会删除警告并修复代码。
答案 2 :(得分:1)
&a[i].surname
实际上是给出了struct member array surname
的地址。 surname
的类型为char [50]
,因此其地址的类型为char (*)[50]
。作为函数的参数,数组衰减指向它的第一个元素。所以,a[i].surname
将完成这项工作。您需要从参数中删除&
。
printf("Surname:");
scanf("%s",a[i].surname);
printf("Name:");
scanf("%s",a[i].name);