[英]Confused about pointers and structures
我正在嘗試比較存儲在結構中的字符串。 我正在使用scanf輸入字符串,我需要在結構中搜索字符串。 這是我的代碼:
int printing_airports(int all_routes_size,int all_airports_size){
int i,position;
char airport;
printf("Enter airport code: ");
scanf("%s", airport);
for(i=0;i<all_airports_size;i++){
if(strcmp(airport,all_airports_divid[i].code) == 0){
position = i;
}
}
printf("%s",all_airports_divid[position].code);
}
這就是我宣布我的結構的方式
struct all_routes{
int id;
char departure_code[4];
char arrival_code[4];
};
struct all_routes all_routes_divid[500];
這是我嘗試編譯時遇到的錯誤
y:~/enee150/project2: compile
functions.c: In function 'printing_airports':
functions.c:370:15: error: invalid type argument of unary '*' (have 'int')
functions.c:373:5: warning: passing argument 1 of 'strcmp' makes pointer from integer without a cast [enabled by default]
/usr/include/iso/string_iso.h:64:12: note: expected 'const char *' but argument is of type 'char'
我究竟做錯了什么? 請幫我。
您將airport
聲明為char
char airport;
但是把它當作一個字符串。 宣布它為char airport[100];
或者。
printf("Enter airport code: ");
scanf("%s", airport);
scanf
需要一個指向變量的指針,結果應作為參數存儲。 當聲明為char
, airport
將作為int
傳遞給scanf
,這就是第一條消息提到int
。 參數被解除引用(一元*
)以找到存儲掃描結果的位置。
for(i=0;i<all_airports_size;i++){
if(strcmp(airport,all_airports_divid[i].code) == 0){
strcmp
需要一個指針(以0結尾的字符串)作為參數。 如果傳遞一個像char
這樣的整數類型,沒有顯式強制轉換,編譯器就會發出警告(因為99.99 +%的時候這樣做是錯誤的)。
而不是將char
傳遞給scanf,你需要傳遞一個char *
; 也就是說,指向內存中可以寫入它找到的字符串的位置的指針。
要做到這一點,您需要將airport
聲明為數組,而不是將airport
聲明為單個char
; 比如, char[20]
。 這不適用於真正的應用程序,因為如果字符串大於20個字符,則會引入緩沖區溢出漏洞,但它應該足以滿足您的需要。
char airport;
你只期待一個炭?
我想你想要的是一個char *因此錯誤的最后一行。
使用char [42]也可以。
或者您實際上可以分配一些字符,但這似乎不符合此分配。
char機場; //這必須是char *或char []來保存代碼printf(“輸入機場代碼:”); scanf(“%s”,機場); // scanf需要字符串的地址,而airport是char
對於(I = 0;我
而且,聲明的struct中的代碼名稱沒有字段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.