错误2:strcmp的返回值问题

#include <iostream>
#include <string>
using namespace std;
class Str
{
public:
 Str( char* str):p(str){};
 bool operator>(Str &str);
 char* p;
};
bool Str::operator >(Str &str)
{
 return(strcmp(this->p,str.p)>0);//之前此处没有>0符号,strcmp返回值为int类型,而>符号返回bool,所以存在一个隐式转换。导致非零的值都为真
}
int main()
{
 Str p1("ABC");
 Str p2("DEF");
 int i = (p1>p2);
 cout << i;
}
这段代码本来是想重载>操作符的,使用strcmp作为比较的准则,但是strcmp返回为1,0,-1分别表示大于、等于、小于,由于>操作符返回值为bool。所以会将所有非零值都认为为真。导致只要p1,p2只要不等就返回1。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
strcmp函数是C++中用于比较两个字符串的函数。它的原型如下: ```c++ int strcmp(const char* str1, const char* str2); ``` 该函数返回一个整数值,表示两个字符串的比较结果。如果返回值为0,则表示两个字符串相等;如果返回值小于0,则表示str1小于str2;如果返回值大于0,则表示str1大于str2。 在引用中提到的代码中,有可能出现strcmp报错的情况。具体问题可能是以下几种情况之一: 1. 缺少头文件:strcmp函数在C++中是通过包含头文件`<cstring>`来使用的。如果没有包含该头文件,编译器会报错。 2. 字符串指针为空:如果str1或str2指针为空,即指向的字符串为空,那么调用strcmp函数时会出现错误。 3. 字符串指针未初始化:如果str1或str2指针未初始化,即没有指向有效的字符串,那么调用strcmp函数时会出现错误。 4. 字符串指针越界:如果str1或str2指针指向的字符串超出了其有效范围,即访问了无效的内存地址,那么调用strcmp函数时会出现错误。 为了解决这些问题,你可以按照以下步骤进行检查和修复: 1. 确保已经包含了`<cstring>`头文件。 2. 检查str1和str2指针是否为空,如果为空,需要进行初始化或者赋予有效的字符串。 3. 检查str1和str2指针指向的字符串是否越界,确保没有访问无效的内存地址。 如果你能提供更多的代码和错误信息,我可以给出更具体的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值