下面的代码给出“未找到”输出。但我希望它能给“发现”。我的错误在哪里?
#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");
}
答案 0 :(得分:4)
在*x==y[i]
中,您要比较两个字符的值而不是两个指针指向的数据。请改用strcmp功能。如果给定的两个指针指向的两个字符串相等,则返回0。所以将其更改为strcmp(x, y[i]) == 0
此外,您应该将char *y
参数更改为char **y
或char *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");
}