为什么以下代码的输出“未找到”而不是“找到”?

时间:2013-07-09 10:21:54

标签: c

下面的代码给出“未找到”输出。但我希望它能给“发现”。我的错误在哪里?

#include <stdio.h>

void compare(char *x, char *face);
int i;

int main(void){

char array[5]="Two";
char *numbers[4]={"One", "Two", "Three", "Four"};

compare(array, *numbers);

}

void compare(char *x, char *y){

for (i = 0; i < 4; i++)
{
    if (*x==y[i])
    {
        printf("\n found");
        return;
    }

}
printf("\n not found\n");
}

3 个答案:

答案 0 :(得分:4)

*x==y[i]中,您要比较两个字符的值而不是两个指针指向的数据。请改用strcmp功能。如果给定的两个指针指向的两个字符串相等,则返回0。所以将其更改为strcmp(x, y[i]) == 0

此外,您应该将char *y参数更改为char **ychar *y[],因为y是指向字符串的指针数组,而不仅仅是一个指针。

最后,compare(array, *numbers);应该被称为compare(array, numbers);,因为你想传递一个指向字符串数组的指针,而不只是指向一个字符串的指针(numbers的类型为{{ 1}}但是当作为参数传递时它会衰减到char*[4]

答案 1 :(得分:4)

结合给定的答案和评论,正确的代码可能如下所示:

#include <stdio.h>

void compare(char *x, char **face);  // signature changed
int i;

int main(void){

   char array[5]="Two";
   char *numbers[4]={"One", "Two", "Three", "Four"};

   compare(array, numbers);  // pass numbers, not *numbers

}

void compare(char *x, char **y) {  // signature changed, see above

    for (i = 0; i < 4; i++)  
    {
        if( strcmp( x, y[i] ) == 0 )   // use strcmp
        {
            printf("\n found");
            return;
        }

    }
    printf("\n not found\n");
}

答案 2 :(得分:3)

#include <stdio.h>

void compare(char *x, char **face);
int i;

int main(void){

char array[5]="Two";
char *numbers[4]={"One", "Two", "Three", "Four"};

compare(array, &numbers[0]);

}

void compare(char *x, char **y){

for (i = 0; i < 4; i++)
{
    if (*x==*y[i])
    {
        printf("\n found");
        return;
    }

}
printf("\n not found\n");
}

上面的代码会给你“找到”,但如果你真的想比较字符串,请使用下面的代码:

void compare(char *x, char **y){

for (i = 0; i < 4; i++)
{
    if (strcmp( x,y[i] ) == 0 )
    {
        printf("\n found");
        return;
    }

}
printf("\n not found\n");
}