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

时间:2012-06-03 21:52:05

标签: c++

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

bool stringComparison::lessThan(char *s1, char* s2) {
  int result = strcmp(*s1,*s2);
  return result < 0;
};

结果不会产生少于0的结果。我如何更改“int result”行以使其工作?

感谢

4 个答案:

答案 0 :(得分:5)

strcmp用于比较字符串; * s1和* s2是字符。你应该用s1和s2(没有星星)调用strcmp。

修改

以下是strcmp

的参考资料

答案 1 :(得分:0)

s1s2是字符串。所以你的代码

int result = strcmp(*s1,*s2);

应该阅读

int result = strcmp(s1,s2);

请参阅strcmp的在线参考。

答案 2 :(得分:0)

您遇到的问题或问题不同于您告诉我们的问题。

在您向我们展示的代码中,s1s2参数的类型为char*strcmp()函数需要类型为char*的参数(实际为const char*)。

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

如果#include<string.h>没有<cstring>,声明strcmp函数的标头,那么编译器可能不会识别不匹配 - 但在C ++中调用未声明的函数是无效的。

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

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

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

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

  3. 出于某种原因,您已决定添加自己的strcmp()函数声明,可能类似于int strcmp(char s1, char s2);。不要那样做。如果您需要标准函数的声明,请为相应的标题添加#include指令。

答案 3 :(得分:0)

我可以推荐一个(可能)改进的功能版本吗?这会修复对strcmp的调用,删除不需要的result变量,并添加const-correctness。

bool stringComparison::lessThan(const char *s1, const char *s2)
{
    return strcmp(s1, s2) < 0;
}

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