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

C语言中如何正确比较结构体字段与变量值

问题原因与解决方案

核心错误点

C语言中不存在字符串直接相等判断的运算符,你代码中用==对比name、gender、position这类字符串类型字段时,实际对比的是两个字符串的内存地址,而非字符串内容。结构体中存储的字符串和用户输入的字符串存放在不同的内存区域,地址永远不可能相等,因此判断条件永远不生效。

修复方法

  1. 首先在代码头部引入字符串处理头文件:
#include <string.h>
  1. 替换原有的if判断条件,使用字符串比较函数strcmp,该函数在两个字符串完全相等时返回值为0,修改后的判断逻辑如下:
if (strcmp(current->name, name) == 0 
    && strcmp(current->gender, gender) == 0 
    && current->age == age 
    && strcmp(current->position, position) == 0)

其他需要修复的代码问题

你现有代码还存在几处逻辑错误,建议同步修改:

  • 用户选择取消删除(输入N/n)时,仅写了EXIT_FAILURE;没有加return,会导致代码继续向下执行,需修改为return EXIT_FAILURE;
  • 删除非头节点时的for循环完全多余,遍历过程中previous指针已经始终指向当前节点的前一个节点,直接修改指针指向即可:
    • 删除尾节点逻辑直接替换为previous->next = NULL;
    • 删除中间节点逻辑直接替换为previous->next = current->next;
  • 仅将局部指针current设为NULL不会释放已删除节点占用的内存,会造成内存泄漏,建议在修改指针指向后添加free(current);释放内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03