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、の長さを渡すために3番目の引数を導入する必要がありarrます。

無関係なヒント:変更していないので*str*arrconst-correctして使用してください:

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

エラーは、配列の長さがないことです。arr [i]を使用すると、プログラミングで不良メモリが読み取られる可能性があります。

関数に「intlength」パラメーターを追加し、whileの代わりにfor(int i = 0; i <length; i ++)を使用します。そうすれば、配列の境界を超えることはありません。これは、(arr [i]!= NULL)によって保証されません。

于 2012-11-11T22:41:06.197 に答える