大家好,
我的代码中有一个编译错误,我不知道该怎么做。
这里是街区:

#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/

10-11 23:12
查看更多