大家好,
我的代码中有一个编译错误,我不知道该怎么做。
这里是街区:
#include <stdio.h>
#include <string.h>
/*
* Function to return index at which team ID input is stored
*/
int getIndex(char* id, char* idList[][50]) {
int k;
for (k=0; k<50; k++) {
if (strcmp(id,idList[k])==0) {
return k;
}
}
printf("Error in getIndex function.\n");
return -1;
}
错误说
Passing argument 2 of 'strcmp' from incompatible pointer type
错误发生在块中的第8行代码(if语句)上。
编辑
(代表迈克尔在这里发布,因为他还不能编辑他的帖子)
我会详细说明我想做什么,因为我在这方面做得并不好。
我希望id[]应该是一个最多50个字符的数组,而idList[][]是一个字符串数组(最多50个字符串,每个字符串最多50个字符)。
我把密码改成了这个,
/*
* Function to return index at which team ID input is stored
*/
int getIndex(char* id[], char* idList[][50]) {
int k;
for (k=0; k<50; k++) {
if (strcmp(id[],idList[k][])==0) {
return k;
}
}
printf("Error in getIndex function.\n");
return -1;
}
但有个错误说:
Expected expression ']' before token
最佳答案
表达式idList[k]
是一个char* [50]
对象,而不是一个char*
对象。您可能打算制作签名char idList[][50]
或char* idList[50]
,或者您可能打算给出第二个索引(如idList[k][j]
)。这就是错误消息的含义。很明显,你最了解函数,所以你最能准确地知道你指的是哪个选项。
编辑
根据这些更新的信息,您可能需要:
int getIndex(const char* id, const char* id_list[], int id_list_length) {
for (int i = 0; i < id_list_length; i++) {
if (!strcmp(id, id_list[i])) {
return i;
}
}
printf("Error in getIndex function; ID \"%s\" not found.\n", id);
return -1;
}
首先,注意我使用
const char*
而不是char*
。这是一个改进,它告诉编译器字符串的内容不会被修改。其次,列表的大小在参数中给出,而不是硬编码到函数签名中。最后,签名中括号(即[]
)的使用更少(通常在C和C++中,在签名中看到指针通常更为常见,特别是考虑到数组实际上只不过是指向重复数据的指针)。您可以在创建数组的地方强制执行长度要求,但是,通常更常见的做法是允许动态长度并自动计算。下面是一个使用示例:const char* id_list[] = { "Alpha", "Bravo", "Charlie" };
int id_list_length = 3;
int zero = getIndex("Alpha", id_list, id_list_length);
int one = getIndex("Bravo", id_list, id_list_length);
int two = getIndex("Charlie", id_list, id_list_length);
int negative_one = getIndex("Not in there", id_list, id_list_length);
您还可以考虑修改此选项,将空字符用作列表的终止字符:
int getIndex(const char* id, const char* null_terminated_id_list[]) {
for (int i = 0; null_terminated_id_list[i] != NULL; i++) {
if (!strcmp(id, null_terminated_id_list[i])) {
return i;
}
}
printf("Error in getIndex function; ID \"%s\" not found.\n", id);
return -1;
}
然后你甚至不需要记录列表的长度,你可以写一些类似的东西:
const char* id_list[] = { "Alpha", "Bravo", "Charlie", NULL };
int zero = getIndex("Alpha", id_list);
int one = getIndex("Bravo", id_list);
int two = getIndex("Charlie", id_list);
int negative_one = getIndex("Not in there", id_list);
关于c - 指针类型不兼容错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4011480/