我有两个 char* 引用,我试图找出哪个更少。我的代码是:
bool stringComparison::lessThan(char *s1, char* s2) {
int result = strcmp(*s1,*s2);
return result < 0;
};
结果是不会产生小于 0 的结果。我如何需要更改“int result”行才能使其工作?
谢谢
我有两个 char* 引用,我试图找出哪个更少。我的代码是:
bool stringComparison::lessThan(char *s1, char* s2) {
int result = strcmp(*s1,*s2);
return result < 0;
};
结果是不会产生小于 0 的结果。我如何需要更改“int result”行才能使其工作?
谢谢
s1
并且s2
是字符串。所以你的代码
int result = strcmp(*s1,*s2);
应该读
int result = strcmp(s1,s2);
请参阅 的在线参考strcmp
。
你有更多的问题,或者不同的问题,比你告诉我们的要多。
在您向我们展示的代码中,s1
和s2
参数的类型为char*
。该strcmp()
函数需要类型的参数char*
(实际上是const char*
)。
如果您调用strcmp(*s1,*s2)
,则尝试strcmp
使用两个类型的参数进行调用char
。正如您所描述的那样,这不会给您不正确的结果;它不会编译。至少,您的编译器应该抱怨类型不匹配。
如果您没有声明函数的标头#include
for<string.h>
或,则编译器可能无法识别不匹配 - 但在 C++ 中调用未声明的函数是无效的。<cstring>
strcmp
确实,正如其他两个答案所说,您应该打电话strcmp(s1, s2)
而不是打电话strcmp(*s1, *s2)
- 但这并不能解释您所描述的症状。更正调用strcmp()
本身并不能解决您遇到的所有问题。
我能想到几个可能的解释:
您使用的是旧编译器,它不会抱怨对未声明函数的调用。获取更新的编译器,或使用使其更符合语言标准的选项调用编译器。
您的编译器正在产生警告(诊断不一定是致命的)并且您忽略了它们。不要忽视警告。
出于某种原因,您决定添加自己的strcmp()
函数声明,可能类似于int strcmp(char s1, char s2);
. 不要那样做。如果您需要标准函数的声明,请#include
为相应的标头添加指令。
我可以建议您的功能的(可能)改进版本吗?这修复了对 的调用strcmp
,删除了不需要的result
变量,并增加了 const 正确性。
bool stringComparison::lessThan(const char *s1, const char *s2)
{
return strcmp(s1, s2) < 0;
}
如果stringComparison
是一个类,我会const
在函数定义的末尾添加另一个类。