2014-09-29 3 views
0

Я хочу сравнить второй элемент массива со строкой, чтобы увидеть, соответствуют ли они. Я пытаюсь использовать memcmp для этого, но это дает мне ошибку. Это правильный способ приблизиться к этому, или я завершаю? Прошу прощения, я новичок в C.Сравнение массива 2d char с массивом 1d char в c

char array[5][32] = {"foo","boo","moo"}; 
char string[32] = "boo"; 
int ret; 
ret = memcmp(array[1][32], string[32], 4) //4 because i don't want it too match 'book' 
if (ret == 0) { 
    printf("equal"); 
} else { 
    printf("not"); 
} 
+0

Потерять [32] по обоим аргументам в 'memcmp'. Это разыменование последнего символа в строке C. –

+0

вместо того, чтобы указывать на 32-й байт вашего массива, укажите на это так: 'ret = memcmp (array [1] [0], string [0], 4)' – Evert

+0

'strcmp (array [1], string) 'будет казаться более уместным. – WhozCraig

ответ

-1

Необходимо сравнить их с начальным адресом. Измените его на

ret = memcmp(&array[1][0], &string[0], 4); 

или просто

ret = memcmp(array[1], string, 4); 

или лучше (как это было предложено @Darren), нет необходимости, чтобы дать длину

ret = strcmp(array[1], string); 
+1

Или 'strcmp' (и аргумент длины). '4' является обязательством, если ваша длина строки когда-либо изменяется. –

+0

@DarrenStone Thx, добавлен в ответ. – herohuyongtao

+0

Даррен проверяет комментарий OP в своем коде. –

0

Если вы хотите сравнить целые строки, то лучше использовать стандартную функцию strcmp Если вы хотите сравнить подстроки, вам необходимо использовать функцию memcmp.

В программе, очевидно, что лучше использовать функцию strcmp, потому что вы пытаетесь сравнить также завершающий нулевой Сравнение будет выглядеть

ret = strcmp(array[1], string); 

if (ret == 0) { 
    printf("equal\n"); 
} else { 
    printf("not equal\n"); 
} 

Что касается вашего кода того выражения массива [1 ] [32] - это один символ. Это не строка.

Если вы хотите сравнить, есть ли строка в двумерном массиве, которая начинается с «boo»; то вы действительно должны использовать функцию memcmp. В этом случае правильный код будет выглядеть

ret = memcmp(array[1], string, strlen(string)); 

if (ret == 0) { 
    printf("equal\n"); 
} else { 
    printf("not equal\n"); 
} 
+0

strcmp и memcmp, а не strcpy и memcpy. –

+0

@ Jonathon Reinhart Спасибо. Все могут сделать опечатку, я только задаюсь вопросом, кто такой идиот, который проголосовал за мой ответ. –

+0

Я был тем идиотом, и я удалил его, поняв, что это опечатка. –

0

Вы можете сделать это с помощью функции «STRCMP» таким образом:

if (strcmp(array[1], string) == 0) { 
    printf("equal\n"); 
} 
else { 
    printf("not equal\n"); 
} 
0

Если вы хотите сравнить до определенной длины в ваша строка, используйте strncmp.

strncmp(array[1], string, 3) 
Смежные вопросы