为何值相同的两个字符串用==比较不成立,其一来自命令行参数
问题根因
你代码里的==运算符不能用来判断C语言字符串内容是否相等。
C语言中的字符串本质是char *类型的指针,==作用于指针时,对比的是两个指针存储的内存地址,而非指针指向的内存中存储的字符串内容:
- 你用到的
array[i].name来自命令行参数argv,程序启动时系统会单独分配内存存储命令行参数,这块内存的地址和存储用户输入的name变量指向的内存地址完全独立,所以==的判断结果永远为假,自然不会进入if分支。 - 调试器显示两个值都是Joe,是因为调试器会主动读取指针指向的内存内容做展示,这和指针本身的地址是否相等没有关系。
修复方法
引入C标准库<string.h>头文件,使用字符串比较函数strcmp判断内容相等:
if (strcmp(array[i].name, name) == 0)
strcmp会逐字符对比两个字符串的内容,完全相等时返回值为0,此时即可正确触发if分支。
内容的提问来源于stack exchange,提问作者willyclub
相关产品推荐
相关产品推荐

