我有两个char *引用,我试图找出哪一个更少。我的代码是:
bool stringComparison::lessThan(char *s1, char* s2) {
int result = strcmp(*s1,*s2);
return result < 0;
};
结果不会产生少于0的结果。我如何更改“int result”行以使其工作?
感谢
答案 0 :(得分:5)
答案 1 :(得分:0)
s1
和s2
是字符串。所以你的代码
int result = strcmp(*s1,*s2);
应该阅读
int result = strcmp(s1,s2);
请参阅strcmp
的在线参考。
答案 2 :(得分:0)
您遇到的问题或问题不同于您告诉我们的问题。
在您向我们展示的代码中,s1
和s2
参数的类型为char*
。 strcmp()
函数需要类型为char*
的参数(实际为const char*
)。
如果您致电strcmp(*s1,*s2)
,则尝试使用strcmp
类型的两个参数调用char
。这不会像你描述的那样给你不正确的结果;它不会编译。至少,您的编译器应该抱怨类型不匹配。
如果#include
或<string.h>
没有<cstring>
,声明strcmp
函数的标头,那么编译器可能不会识别不匹配 - 但在C ++中调用未声明的函数是无效的。
正如其他两个答案所说的那样,你应该调用strcmp(s1, s2)
而不是strcmp(*s1, *s2)
- 但这并不能解释你所描述的症状。更正strcmp()
的来电本身并不会纠正您遇到的所有问题。
我可以想到一些可能的解释:
您使用的旧编译器不会抱怨对未声明函数的调用。获取更新的编译器,或使用使其更符合语言标准的选项调用编译器。
您的编译器正在生成警告(诊断不一定是致命的),而您忽略它们。不要忽视警告。
出于某种原因,您已决定添加自己的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
。