如何在函数中使用 strcmp() 时修复预期的“const char *”但参数的类型为“char **”
Posted
技术标签:
【中文标题】如何在函数中使用 strcmp() 时修复预期的“const char *”但参数的类型为“char **”【英文标题】:How to fix expected 'const char *' but argument is of type 'char **` while using strcmp() in a function 【发布时间】:2021-12-27 11:54:19 【问题描述】:它应该是一个函数,可以根据所选运算符找到两个数字的和、差等,但是当我使用 strcmp()
检查所选运算符时,我收到错误 expected 'const char *' but argument is of type 'char **'
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include <string.h>
int calc(int ran1,int ran2,char op)
if(strcmp(op, "+")==0)
return ran1+ran2;
if(strcmp(op, "-")==0)
return ran1-ran2;
if(strcmp(op, "*")==0)
return ran1*ran2;
if(strcmp(op, "/")==0)
return ran1/ran2;
int main()
int ran1=25;
int ran2=5;
char op="+";
printf("%d", calc(ran1, ran2, op));
【问题讨论】:
对于char
类型必须使用单引号'
(例如'-'
),对于const char *
或char *
必须使用双引号"
(例如:"foobar"
)跨度>
对于这个代码,错误信息应该是but argument is of type 'char'
。请始终发布与您的错误消息、输出和/或描述相匹配的代码。
您的编译器是否显示一些关于在return
之后未执行的代码的警告? if(strcmp(op, "*")==0)
部分和该函数内的所有以下部分将永远不会到达,因为您之前已经返回。
【参考方案1】:
好像是这个错误提示
预期为 'const char *' 但参数的类型为 'char **'
与显示的代码不对应,因为程序中没有使用char **
类型的表达式。
由于大括号的放置无效,函数中也存在逻辑错误
int calc(int ran1,int ran2,char op)
if(strcmp(op, "+")==0)
return ran1+ran2;
if(strcmp(op, "-")==0)
return ran1-ran2;
if(strcmp(op, "*")==0)
return ran1*ran2;
if(strcmp(op, "/")==0)
return ran1/ran2;
不过对于初学者来说这个初始化
char op="+";
不正确。看来你的意思
char op = '+';
也就是说,您需要使用整数字符常量'+'
而不是字符串文字"+"
来初始化char
类型的对象op
。
由于参数op
的类型为char
int calc(int ran1,int ran2,char op)
那么它可能不会在strcmp
like的调用中使用
if(strcmp(op, "+")==0)
在这个和其他类似的 if 语句中只使用相等运算符 ==
就足够了
if ( op == '+' )
请注意,您可以使用 switch 语句代替 if 语句。例如
switch ( op )
case '+':
//...
case '-':
//...
【讨论】:
以上是关于如何在函数中使用 strcmp() 时修复预期的“const char *”但参数的类型为“char **”的主要内容,如果未能解决你的问题,请参考以下文章
如何修复ValueError:没有足够的值来解包(预期2,得到1)[重复]
如何修复“反应:预期分配或函数调用,而是看到一个表达式”(状态分配)?