0

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

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

结果是不会产生小于 0 的结果。我如何需要更改“int result”行才能使其工作?

谢谢

4

4 回答 4

5

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

编辑:

这是strcmp的参考

于 2012-06-03T21:55:41.253 回答
0

s1并且s2是字符串。所以你的代码

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

应该读

int result = strcmp(s1,s2);

请参阅 的在线参考strcmp

于 2012-06-03T22:10:07.350 回答
0

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

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

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

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

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

我能想到几个可能的解释:

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

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

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

于 2012-06-03T22:36:26.237 回答
0

我可以建议您的功能的(可能)改进版本吗?这修复了对 的调用strcmp,删除了不需要的result变量,并增加了 const 正确性。

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

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

于 2012-06-03T22:47:06.057 回答