2017-08-18 137 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); 
相關問題