如果在搜索功能链表中的语句

问题描述 投票:1回答:2

我想在链接列表中搜索等于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 search linked-list singly-linked-list c-strings
2个回答
0
投票

C中的字符串非常棘手。 C中的字符串只是一个数组。就像int的数组有一个小但明显的区别:它们必须以'\0'结尾

让我们看一下这段代码:

...
if(p->idf == x){
    return p->value;
}
...

根据您的代码,idfchar的数组。更准确地说,它是指向数组第一个元素的指针(这是数组在C中的工作方式)。那x呢?它是同一类型-指向different数组的第一个元素的指针。

所以p->idf == x所做的是比较数组的地址。如果要与C中的字符串进行比较,则有两个函数可以做到这一点:strcmpstrncmp

第一个迭代数组并比较相应的值,直到达到\0(字符串字符的结尾)。第二个参数有一个额外的参数,它告诉函数它必须执行多少次比较。

一开始这一切可能会使您感到困惑,但是指针的概念是一个非常强大的功能,当您习惯了它时,它很简单。

如果您想了解C中的字符串,则应该看一下here


0
投票

您需要比较指向的字符串而不是指针本身。

© www.soinside.com 2019 - 2024. All rights reserved.