将2d char数组与c中的1d char数组进行比较

时间:2014-09-29 13:55:12

标签: c arrays char

我想比较数组的第二个元素与字符串,看它们是否匹配。我试图使用memcmp来做到这一点,但它给了我一个错误。这是接近这个的正确方法,还是我完成了?对不起,我是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");
}

4 个答案:

答案 0 :(得分:0)

如果要比较整个字符串,那么最好使用标准函数strcmp如果要比较子字符串,则需要使用函数memcmp

在你的程序中,显然最好使用函数strcmp因为你试图比较终止零 比较看起来像

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

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

至于你的代码,那么表达式数组[1] [32]是一个单个字符。它不是一个字符串。

如果你想比较二维数组中是否有一个以&#34开头的字符串; boo&#34 ;;那么你确实应该使用函数memcmp。在这种情况下,正确的代码看起来像

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

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

答案 1 :(得分:0)

您可以使用' strcmp'以这种方式运作:

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

答案 2 :(得分:0)

如果您只想将最多与字符串中的某个长度进行比较,请使用strncmp

strncmp(array[1], string, 3)

答案 3 :(得分:-1)

您应该从起始地址比较它们。将其更改为

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

或只是

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

或更好(如@Darren所建议的),无需给出长度

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