gpt4 book ai didi

c - 不兼容的指针类型错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:59 25 4
gpt4 key购买 nike

大家好,我的代码出现编译错误,我不知道该怎么做。这是 block :

#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

错误发生在 block 中的第 8 行代码(if 语句)。

编辑(代表迈克尔张贴在这里,因为他还不能编辑他的帖子)

我会详细说明我想做什么,因为我在这方面做得并不好。

我想要将 id[] 与 idList[][] 进行比较,它应该是最多 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;
}

首先,请注意我使用了 <b>const</b> 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);

您还可以考虑修改它以使用 NULL 作为列表的终止字符:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com