2017-08-18 2 views
-2

Ich weiß nicht, wie ich diese Warnung beheben soll, aber vor allem warum sie in meinem Code erscheint. In der ersten Phase muss mein Code einige Namen und Nachnamen aufzeichnen, und ich habe Strukturen verwendet.Warnung: Format gibt den Typ 'char *' an, aber das Argument hat den Typ '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; 
} 

Antwort

1

Verwenden Sie keine & in Strings als surname ist bereits im Format Scanf wird erwartet.

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

Auch lesen Sie bitte, warum Sie Länge für Zeichenfolge gesetzt haben in scanf.

Read a string as an input using scanf

1

scanf wird für einen Zeiger auf char suchen, aber in Ihrem Code haben Sie diesen

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

a[i].name bekommen ein Array von char, die für die Zwecke der scanf ist das gleiche wie a char *, aber Sie bekommen den Zeiger darauf, so dass Sie mit char (*)[50] enden. Entfernen Sie einfach das unnötige kaufmännische Und Sie werden die Warnung entfernen und Ihren Code reparieren.

1

&a[i].surname gibt tatsächlich die Adresse des Strukturelementarrays surname. surname ist vom Typ char [50], so dass die Adresse vom Typ char (*)[50] ist. Als Argument für eine Funktion zerfällt das Array zum Zeiger auf das erste Element. Also, a[i].surname wird den Job machen. Sie müssen & aus dem Argument entfernen.

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