C++ 在c+中使用char*s和strcmp函数+;

C++ 在c+中使用char*s和strcmp函数+;,c++,C++,我有两个char*引用,我试图找出哪一个更少。我的密码是: bool stringComparison::lessThan(char *s1, char* s2) { int result = strcmp(*s1,*s2); return result < 0; }; boolstringcomparison::lessThan(char*s1,char*s2){ int结果=strcmp(*s1,*s2); 返回结果

我有两个char*引用,我试图找出哪一个更少。我的密码是:

bool stringComparison::lessThan(char *s1, char* s2) {
  int result = strcmp(*s1,*s2);
  return result < 0;
};
boolstringcomparison::lessThan(char*s1,char*s2){
int结果=strcmp(*s1,*s2);
返回结果<0;
};
其结果是从未产生过小于0的结果。我需要如何更改“int result”行才能使其正常工作


感谢

strcmp用于比较字符串*s1和*s2是字符。您应该使用s1和s2(无星)调用strcmp

编辑:


以下是用于比较字符串的strcmp的参考*s1和*s2是字符。您应该使用s1和s2(无星)调用strcmp

编辑:


以下是
s1
s2
是字符串的参考。所以你的代码

int result = strcmp(*s1,*s2);
应该读

int result = strcmp(s1,s2);

参见联机参考,了解strcmp
s1
s2
是字符串。所以你的代码

int result = strcmp(*s1,*s2);
应该读

int result = strcmp(s1,s2);

请参阅strcmp的在线参考资料

您遇到的问题比您告诉我们的问题更多或不同

在您向我们展示的代码中,
s1
s2
参数属于
char*
类型。
strcmp()
函数需要类型为
char*
(实际上是
constchar*
)的参数

如果调用
strcmp(*s1,*s2)
,则尝试使用两个
char
类型的参数调用
strcmp
。这不会像你描述的那样给你错误的结果;它不会编译。至少,编译器应该抱怨类型不匹配

如果没有<代码>包含<代码> <代码>或<代码> <代码>,声明“<代码> STRCMP 函数”的头,则编译器可能不会识别错配——但是调用未声明的函数在C++中无效。

确实,正如其他两个答案所说,您应该调用
strcmp(s1,s2)
,而不是
strcmp(*s1,*s2)
——但这并不能解释您描述的症状。更正对
strcmp()
的调用本身并不能纠正您遇到的所有问题

我可以想出一些可能的解释:

  • 您使用的是一个旧编译器,它不会抱怨对未声明函数的调用。获取一个更新的编译器,或者使用使其更符合语言标准的选项调用编译器

  • 您的编译器正在生成警告(诊断不必是致命的),而您正在忽略它们。不要忽视警告

  • 出于某种原因,您决定添加自己的
    strcmp()
    函数声明,可能类似于
    intstrcmp(chars1,chars2)。不要那样做。如果需要标准函数的声明,请为相应的标题添加
    #include
    指令


  • 你有比你告诉我们的更多的问题,或者不同的问题

    在您向我们展示的代码中,
    s1
    s2
    参数属于
    char*
    类型。
    strcmp()
    函数需要类型为
    char*
    (实际上是
    constchar*
    )的参数

    如果调用
    strcmp(*s1,*s2)
    ,则尝试使用两个
    char
    类型的参数调用
    strcmp
    。这不会像你描述的那样给你错误的结果;它不会编译。至少,编译器应该抱怨类型不匹配

    如果没有<代码>包含<代码> <代码>或<代码> <代码>,声明“<代码> STRCMP 函数”的头,则编译器可能不会识别错配——但是调用未声明的函数在C++中无效。

    确实,正如其他两个答案所说,您应该调用
    strcmp(s1,s2)
    ,而不是
    strcmp(*s1,*s2)
    ——但这并不能解释您描述的症状。更正对
    strcmp()
    的调用本身并不能纠正您遇到的所有问题

    我可以想出一些可能的解释:

  • 您使用的是一个旧编译器,它不会抱怨对未声明函数的调用。获取一个更新的编译器,或者使用使其更符合语言标准的选项调用编译器

  • 您的编译器正在生成警告(诊断不必是致命的),而您正在忽略它们。不要忽视警告

  • 出于某种原因,您决定添加自己的
    strcmp()
    函数声明,可能类似于
    intstrcmp(chars1,chars2)。不要那样做。如果需要标准函数的声明,请为相应的标题添加
    #include
    指令

  • 我可以建议(可能)改进您的功能吗?这将修复对strcmp的调用,删除不需要的
    结果
    变量,并添加常量正确性

    bool stringComparison::lessThan(const char *s1, const char *s2)
    {
        return strcmp(s1, s2) < 0;
    }
    
    bool stringComparison::lessThan(常量字符*s1,常量字符*s2)
    {
    返回strcmp(s1,s2)<0;
    }
    
    如果
    stringComparison
    是一个类,我会在函数定义的末尾添加另一个
    const

    我可以建议(可能)改进您的函数版本吗?这将修复对strcmp的调用,删除不需要的
    结果
    变量,并添加常量正确性

    bool stringComparison::lessThan(const char *s1, const char *s2)
    {
        return strcmp(s1, s2) < 0;
    }
    
    bool stringComparison::lessThan(常量字符*s1,常量字符*s2)
    {
    返回strcmp(s1,s2)<0;
    }
    

    如果
    stringComparison
    是一个类,我会在函数定义的末尾添加另一个
    const

    如果我只有对*s1和*s2的引用,有没有办法从中获取字符串?@user1434066:你没有引用,你有指针
    s1
    可能指向字符串的第一个字符(序列