我有这个函数,它接受一个char **和一个char *作为参数,它应该返回char **中char *的索引,如果它不在字符串数组中,则返回-1。我确定错误是while(arr[i] != NULL)...
,但我不知道怎么做。
int isInArray(char** arr, char* str) {
int i = 0;
while(arr[i] != NULL) {
if(strcmp(arr[i], str) == 0)
return i;
i++;
}
return -1;
}
答案 0 :(得分:2)
您可能忘记将char*
的最后一个arr
元素设置为NULL。如果你不能这样做,那么你应该引入第三个参数size_t arr_len
来传递arr
的长度。
不相关的提示:由于您未修改*str
或*arr
,因此请保持正确并使用:
int isInArray(const char* const* arr, const char* str)
答案 1 :(得分:0)
您的错误是您没有数组的长度。 arr [i]会导致您的编程读取不良内存。
在函数中添加“int length”参数,然后使用 for(int i = 0; i< length; i ++) 而不是一会儿。 那样你就永远不会超出数组的范围,这不是由(arr [i]!= NULL)保证的