簡體   English   中英

對指針和結構感到困惑

[英]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需要一個指向變量的指針,結果應作為參數存儲。 當聲明為charairport將作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM