我正在尝试比较存储在结构中的字符串。我正在使用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'
我做错了什么?请帮帮我。
答案 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
中的代码名称没有字段