如何修复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
相关产品推荐
相关产品推荐

