0

我有这个函数,它以 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;
}
4

2 回答 2

2

您可能忘记将 的最后一个char*元素设置arr为 NULL。如果你不能这样做,那么你应该引入第三个参数size_t arr_len来传递arr.

不相关的提示:由于您没有修改*stror *arr,因此请保持正确并使用:

int isInArray(const char* const* arr, const char* str)
于 2012-11-11T22:39:16.100 回答
0

您的错误是您没有数组的长度。arr[i] 可能导致您的程序读取坏内存。

在函数中添加“int length”参数,然后使用 for(int i=0; i < length; i++) 而不是 while。这样,您将永远不会超出数组的范围, (arr[i] != NULL) 不能保证这一点

于 2012-11-11T22:41:06.197 回答