2012-01-13 3 views
0

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

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;} 
+0

Ваш 'str' - это массив из 16 строк (автоматически созданный 16), каждый из которых может содержать 15 + 1 символов (которые вы указали как второе измерение). Вы можете сохранить несколько байтов с помощью 'char str [] [4] = {" mov "," cmp ", ...};' и 'if (SearchString (str," word ", sizeof str/sizeof * str) == -1)/* ... * /; ' – pmg

ответ

4

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

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

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

0

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

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

3

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

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

if (strcmp(arr[n], key) == 0) { 
1

Параметр передается как символ ** ар, которая не является правильным.

Одна из альтернатив меняется protopype к:

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