C语言中如何正确比较结构体字段与变量值
问题原因与解决方案
核心错误点
C语言中不存在字符串直接相等判断的运算符,你代码中用==对比name、gender、position这类字符串类型字段时,实际对比的是两个字符串的内存地址,而非字符串内容。结构体中存储的字符串和用户输入的字符串存放在不同的内存区域,地址永远不可能相等,因此判断条件永远不生效。
修复方法
- 首先在代码头部引入字符串处理头文件:
#include <string.h>
- 替换原有的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
相关产品推荐
相关产品推荐

