2017-08-18 87 views
-2

我不知道如何解决此警告,但特别是为什么它出现在我的代码中。在第一阶段,我的代码必须记录一些姓名和我使用的结构。警告:格式指定类型'char *',但参数具有类型'char(*)[50]'

#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; 
} 

回答

1

不要在scanf的格式字符串中使用&surname已经期待它。

printf("Surname:"); 
scanf("%s",a[i].surname); 
printf("Name:"); 
scanf("%s",a[i].name); 

另外,请阅读你为什么要设置字符串长度scanf

Read a string as an input using scanf

1

scanf正在寻找一个指针char,但在你的代码,你有这个

scanf("%s",&a[i].name); 

a[i].namechar数组,它为scanf的目的是一样的一个char *,但你得到的指针,所以你最终与char (*)[50]。只需删除不需要的&符号,即可删除警告并修复代码。

1

&a[i].surname实际上给出了结构成员数组surname的地址。 surnamechar [50]的类型,所以它的地址将是char (*)[50]。作为函数的参数,数组衰减指向它的第一个元素。因此,a[i].surname将完成这项工作。您需要从参数中删除&

printf("Surname:"); 
scanf("%s",a[i].surname); 
printf("Name:"); 
scanf("%s",a[i].name); 
相关问题