C语言字符串数组与字面量比较失效的问题排查
问题根源
你用==比较字符串的逻辑是错误的。在C语言中,string1作为数组名,本质是指向数组首元素的指针;而"Automatic"是一个字符串常量,它存储在内存的另一块区域,同样是一个指针。==在这里比较的是两个指针的内存地址,而非字符串的实际内容,所以两者必然不相等,导致输出ohnoo。
解决方案
C语言中比较字符串内容必须使用<string.h>头文件提供的strcmp函数:
- 当
strcmp(a, b)返回0时,表示两个字符串内容完全一致 - 返回负数,表示
a的ASCII码序列小于b - 返回正数,表示
a的ASCII码序列大于b
修改后的测试代码如下:
#include <stdio.h> #include <string.h> char string1[10] = "Automatic"; int main() { if(strcmp(string1, "Automatic") == 0) { printf("huzzah\n"); } else{ printf("ohnoo\n"); } }
针对结构体检测的延伸实现
针对你后续要在结构体数组中检测关键词并统计出现次数的需求,可以参考以下实现思路:
- 先定义包含目标字符串字段的结构体
- 遍历结构体数组,对每个元素的目标字段用
strcmp与关键词对比 - 每匹配成功一次,就累加计数器
示例代码:
#include <stdio.h> #include <string.h> // 定义结构体 typedef struct { char keyword[20]; // 可添加其他字段 } DataItem; int main() { DataItem items[] = { {"Automatic"}, {"Manual"}, {"Automatic"}, {"Semi-Automatic"} }; int count = 0; const char* target = "Automatic"; int item_count = sizeof(items) / sizeof(items[0]); for(int i = 0; i < item_count; i++) { if(strcmp(items[i].keyword, target) == 0) { count++; } } printf("关键词「%s」出现次数:%d\n", target, count); // 输出:关键词「Automatic」出现次数:2 return 0; }
内容的提问来源于stack exchange,提问作者mr. yoxon
相关产品推荐
相关产品推荐

