искать строку в массиве строк - PullRequest
1 голос
/ 13 января 2012

Я продолжаю получать плохие указатели.Может кто-нибудь сказать мне, что я делаю не так?

int SearchString( char* arr[], char* key, int size )
{
int n;
for ( n = 0; n < size; ++n ) {
    if ( strcmp(arr[n], key) ) { 
        return n;
    } 
} 
return -1;

}

char str[][16] = { "mov","cmp","add","sub","lea","not","clr","inc","dec","jmp","bne","red","jrn","psr","rts","stop"};

    if(SearchString(str,"word",16) == -1){  return FALSE;}

Ответы [ 4 ]

4 голосов
/ 13 января 2012

Не могу сказать, откуда ваш word.Вы, вероятно, хотите if (!strcmp(arr[n],key)) return n; (наоборот).И тип массива, вероятно, не тот, который вы хотите.Попробуйте вместо

const char *str[] = { "mov",.... };

.У вас есть массив массивов символов, и вы передаете его туда, где вы ожидаете массив указателей.

3 голосов
/ 13 января 2012

Измените char str[][16] на char *str[16] (или только char *str[]).

Кроме того, strcmp возвращает ноль, когда строки равны, поэтому вы хотите вместо этого:

if ( strcmp(arr[n], key) == 0 ) { 
1 голос
/ 13 января 2012

Параметр передается как char ** ar, что неверно.

Одной из альтернатив является изменение прототипа на:

int SearchString( char arr[][16], char* key, int size ) чтобы получить ожидаемое поведение.

1 голос
/ 13 января 2012

strcmp() возвращает ноль , если строки равны!Ваш тест должен быть if (!strcmp(...))

Также рассмотрите возможность использования strncmp().

...