我想在链接列表中搜索等于x的字符串(函数搜索的参数)并返回其值,但是每次当列表中的idf正常存在时,该函数返回“不存在”。
我认为问题是“ if语句”不起作用,并且我不知道如何解决它。
我的代码
typedef struct idf One;
struct idf {
char *idf;
int value;
One *next;
};
typedef struct List_symb {
One *head;
} List ;
int search(List T, char *x){
One *p = T.head;
while(p->next != NULL){
if(p->idf == x){
return p->value;
}
p = p->next;
}
printf("doesn't exist\n");
exit(1);
}
C中的字符串非常棘手。 C中的字符串只是一个数组。就像int
的数组有一个小但明显的区别:它们必须以'\0'
结尾。
让我们看一下这段代码:
...
if(p->idf == x){
return p->value;
}
...
根据您的代码,idf
是char
的数组。更准确地说,它是指向数组第一个元素的指针(这是数组在C中的工作方式)。那x
呢?它是同一类型-指向different数组的第一个元素的指针。
所以p->idf == x
所做的是比较数组的地址。如果要与C中的字符串进行比较,则有两个函数可以做到这一点:strcmp
和strncmp
。
第一个迭代数组并比较相应的值,直到达到\0
(字符串字符的结尾)。第二个参数有一个额外的参数,它告诉函数它必须执行多少次比较。
一开始这一切可能会使您感到困惑,但是指针的概念是一个非常强大的功能,当您习惯了它时,它很简单。
如果您想了解C中的字符串,则应该看一下here。
您需要比较指向的字符串而不是指针本身。