c - 替换链表中的节点值

标签 c linked-list setter

我有一个链表和一个 setter 函数。

struct my_struct {
    int    value;
    int  type;
    char   *name;
    struct my_struct *next;
};

struct my_struct *setValue(struct my_struct *s, char *name, int b) {
    if(s!=NULL) {
        while(s != NULL) {
            if( strcmp(s->name,name) == 0) {
                s->value = b;
            }
            s=s->next;
        }
        return s;
    }
    return NULL;
}

这里name是搜索关键字,b是s->value的新值。为什么 s->value 不能改变?在那个函数之后,输出很奇怪。我不明白,发生了什么事。

最佳答案

您需要使用 strcmp 来测试字符串是否相等,如下所示。在您的代码中,您正在测试两个指针是否相等 [related post] .

#include <string.h>

if(strcmp(s->name, name) == 0) { // if both strings are equal
    s->value = b;
}

您的 return 语句的位置很有趣。您返回的是最后更改的项目的地址,这可能是不受欢迎的。

根据@Matthew Iselin 的评论,将循环更改为以下内容:

while(s != NULL) {
    ...
}

如果您将根节点设置为函数的返回值,s 在遍历链表后将始终为 NULL,因此该函数将始终返回 NULL

关于c - 替换链表中的节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8250386/

相关文章:

c++ - “Setter”方法不更改属性,但是测试方法输出“test”吗? (以最少的可复制示例重新提交)

检查下一行

c - 使用 string.h 时 makefile 错误

python - 链表 Python 2.7

c++ - 如何从链表中删除这些节点?

java - 为什么要使用 getter 和 setter/accessor?

objective-c - 重写setter方法并获取“xxx的本地声明隐藏实例变量”

c - C 中的数组传递

python - 如何查找与CPython堆栈框架的执行相关的C堆栈指针

c++ - 如何访问属于另一个类的私有(private)成员的类的方法