警告:Format指定类型'char *'但参数的类型为'char(*)[50]'

时间:2017-08-18 12:26:49

标签: c

我不知道如何修复此警告,但特别是它出现在我的代码中的原因。在第一阶段,我的代码必须记录一些名字和姓氏,我使用结构。

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

3 个答案:

答案 0 :(得分:1)

请勿在字符串中使用&,因为surname已经采用scanf期望的格式。

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

另外,请阅读为什么必须在scanf中设置字符串的长度。

Read a string as an input using 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);