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

如何修复C语言使用strcmp()时提示expected 'const char *'但参数为char **的错误

问题定位

你遇到的编译错误由多个语法和逻辑问题共同导致:

  • 类型不匹配:strcmp 函数的作用是比较两个以\0结尾的C字符串,要求两个入参均为const char *类型。但你代码中calc函数的op形参定义为char类型(单个字符),同时main函数中char op="+";写法错误:双引号包裹的"+"是字符串字面量,类型为const char *,赋值给char类型变量会触发类型混乱,最终导致编译器报参数类型不匹配的错误。
  • 逻辑结构错误:第二个判断减号的if语句未闭合大括号,导致乘、除的判断被嵌套在减号的分支内,只有运算符为减号时才会触发乘除判断,逻辑完全失效。
  • 返回值缺失:calc函数没有覆盖非加减乘除运算符的返回分支,运行时会触发未定义行为。
修复方案

运算符本身为单个字符,不需要调用strcmp做字符串比较,直接用==判断字符即可,修复后代码如下:

#include<stdio.h>

int calc(int ran1,int ran2,char op){
    if(op == '+'){
        return ran1 + ran2;
    }
    if(op == '-'){
        return ran1 - ran2;
    }
    if(op == '*'){
        return ran1 * ran2;
    }
    if(op == '/'){
        // 可选补充:除零判断避免运行时崩溃
        if(ran2 == 0) return 0;
        return ran1 / ran2;
    }
    // 非法运算符默认返回值
    return 0;
}

int main(){
    int ran1=25;
    int ran2=5;
    // 单个字符用单引号包裹
    char op='+';
    printf("%d", calc(ran1, ran2, op));
    return 0;
}

如果确实需要使用strcmp实现,需要将op统一修改为字符串类型:calc函数形参改为const char *op,main中op定义为const char *op = "+"即可,但该方案对于单个字符的运算符场景属于冗余实现,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:05