0

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

#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");
}
4

3 回答 3

4

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

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

最后,compare(array, *numbers);应该调用 ascompare(array, numbers);因为你想传递一个指向字符串数组的指针,而不仅仅是一个指向一个字符串的指针(它numbers是类型,但当作为参数传递时char*[4]它会衰减为类型)。char**

于 2013-07-09T10:25:37.857 回答
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");
}
于 2013-07-09T10:31:10.673 回答
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");
}
于 2013-07-09T10:37:46.977 回答