You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++单链表更新节点gol字段提示成功但值未生效问题

问题排查

核心bug出在赋值逻辑,共有4处逻辑错误:

  • 最关键的笔误:temp->gol==goldar;使用了**相等比较运算符==**而非赋值操作,这行代码仅会返回一个布尔值、不做任何写入操作,因为没有接收判断结果也不会触发编译报错,是提示更新成功但值未变化的直接原因。
  • C风格char数组不支持直接用=赋值:即使把==改成=,直接给char数组名赋值只会操作地址,不会把输入的字符串内容拷贝到节点的内存空间,需要用字符串拷贝函数完成赋值。
  • 存在冗余无效代码:单独成行的temp->id;没有任何执行效果,匹配到ID后写的temp->id=caridata;是重复赋值(本身就是靠ID相等才进入分支,ID值不需要重新写入)。
  • 匹配到目标节点后没有终止遍历:更新完成后代码会继续遍历后续链表节点,如果存在重复ID会触发重复修改,做无意义的性能消耗。
修正后可运行代码

注意需要提前引入<cstring>头文件支持字符串拷贝操作:

#include <cstring> // 字符串拷贝函数依赖头文件

void edit() {
    node *temp = awal_ptr;
    char goldar[5];
    int caridata;
    int ketemu = 0;

    if(awal_ptr != NULL) {
        cout << "\n Input Id  Yang Akan Diedit\t: ";
        cin >> caridata;
        while(temp != NULL) {
            if(caridata == temp->id) {
                cout << ">>>------------------------------<<<" << endl;
                cout << " Nama\t: " << temp->nama << endl;
                cout << " Golongan Darah\t: " << temp->gol << endl;
                cout << " ------------------------------" << endl;
                ketemu = 1;
                cout << "Masukan Golongan Darah Baru: ";
                cin >> goldar;
                
                // 用安全字符串拷贝完成gol字段赋值,手动截断避免缓冲区溢出
                strncpy(temp->gol, goldar, sizeof(temp->gol) - 1);
                temp->gol[sizeof(temp->gol) - 1] = '\0';

                cout << "Data Berhasil Diupdate" << endl;
                break; // 更新完成直接跳出循环,终止无意义遍历
            }
            temp = temp->next;
        }
        if(ketemu == 0) {
            cout << " Data tidak ditemukan";
        }
    } else {
        cout << " Belum ada data!";
    }
    getch();
}
补充说明
  • 如果节点的gol字段定义为std::string类型,不需要调用strcpy,直接写temp->gol = goldar;即可完成赋值,还能从根源避免char数组的缓冲区溢出风险。
  • 这类==和=笔误属于C/C++高频逻辑bug,编译器默认不会对无副作用的表达式抛出报错,可以在编译时开启高等级警告(比如gcc加-Wall参数),大部分编译器会对这类无意义的比较表达式抛出提示。

内容的提问来源于stack exchange,提问作者Xianying

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:15:34