在char **中找到char *的索引时的Segfault

时间:2012-11-11 22:36:33

标签: c segmentation-fault arrays

我有这个函数,它接受一个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;
}

2 个答案:

答案 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)保证的