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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:15:51