如何在函数中使用 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)

那么它可能不会在strcmplike的调用中使用

 if(strcmp(op, "+")==0)

在这个和其他类似的 if 语句中只使用相等运算符 == 就足够了

if ( op == '+' )

请注意,您可以使用 switch 语句代替 if 语句。例如

switch ( op )

case '+':
    //...
case '-':
    //...

【讨论】:

以上是关于如何在函数中使用 strcmp() 时修复预期的“const char *”但参数的类型为“char **”的主要内容,如果未能解决你的问题,请参考以下文章

strcmp - '[' 标记之前的预期主表达式

如何修复ValueError:没有足够的值来解包(预期2,得到1)[重复]

如何修复“反应:预期分配或函数调用,而是看到一个表达式”(状态分配)?

c++中strcmp函数如何使用??

与 GROUP BY 子句一起使用时,如何修复“ORA-00932:不一致的数据类型:预期 - 得到 CLOB”?

如何修复预期的启动工会。在命令行上将 JSON 转换为 Avro 时得到 VALUE_NUMBER_INT?