对指针和结构感到困惑

时间:2012-03-18 16:39:57

标签: c project

我正在尝试比较存储在结构中的字符串。我正在使用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'

我做错了什么?请帮帮我。

4 个答案:

答案 0 :(得分:3)

您将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 +%的时间这样做是错误的。)

答案 1 :(得分:0)

您需要将char传递给{{1>},而不是将char *传递给scanf。也就是说,指向内存中可以写入它找到的字符串的位置的指针。

要执行此操作,您需要将其声明为数组,而不是将airport声明为单个char;说,char[20]。这不适合真正的应用程序,因为如果字符串大于20个字符,则会引入缓冲区溢出漏洞,但它应该足以满足您的需要。

答案 2 :(得分:0)

char airport;

你只期待一个炭火吗?

我认为你想要的是一个char *因此错误中的最后一行。

使用char [42]也可以。

或者您实际上可以分配一些字符,但这似乎不符合此分配。

答案 3 :(得分:0)

char机场; //这必须是char *或char []来保存代码   printf(“输入机场代码:”);   scanf(“%s”,机场); // scanf需要字符串的地址,而airport是char

为(I = 0;我

此外,声明的struct

中的代码名称没有字段