c++中字符串比较随笔

工作中遇到的小问题,写成随笔

 

问题描述:

(1)

//工作站
typedef struct
{
	char chWorkstationName[11];//工作站名
	char chIP[16];//IP地址
	char chAE[16];//AE名
	char chUsedPrinter[41];//使用打印机
	char chOcrFlag[40];//是否使用Ocr设置 } WORKSTATION_SET;

typedef std::list< WORKSTATION_SET > WORKSTATION_SET_LIST; //工作站列表


(2)

		WORKSTATION_SET_LIST::iterator it;
		it = std::find_if(
			_Module.m_workstationlist.begin(),
			_Module.m_workstationlist.end(),
			SearchWorkstationByIP(job.Workstation.IP));
		if( it != _Module.m_workstationlist.end() )
		{
			job.Workstation.Name = it->chWorkstationName;
			if ( it->chOcrFlag == _T("使用"))
			{
				job.Workstation.nOcrFlag = 1;
			}
			else
			{
				job.Workstation.nOcrFlag = 2;
			}
		}


(3)

		HHWORKSTATION_SET_LIST::iterator it;
		it = std::find_if(
			_Module.m_workstationlist.begin(),
			_Module.m_workstationlist.end(),
			SearchWorkstationByIP(job.Workstation.IP));
		if( it != _Module.m_workstationlist.end() )
		{
			job.Workstation.Name = it->chWorkstationName;
			CString strOcrFlag = it->chOcrFlag;
			if ( strOcrFlag == _T("使用"))
			{
				job.Workstation.nOcrFlag = 1;
			}
			else
			{
				job.Workstation.nOcrFlag = 2;
			}
		}

上述(2)和(3)中出现两段不同的代码,在(2)中执行到if语句的时候,判断进入else分支执行,在(3)中执行到if语句的时候,判断进入到if分支执行。

根据期望,应该进入到if分支执行,出现的原因如下


分析:

1.参看(1)中的定义可以发现,chOcrFlag是一个char类型的数组,  it->chOcrFlag 的类型是char*(数组名是数字的首地址)。所以,在(2)中的if比较中,实际上是用一个  char*类型的数据  和  一个字符串常量  在进行比较,不可能相等

2.参看(3)中的代码发现  CString strOcrFlag = it->chOcrFlag;  这一句的strOcrFlag变量可以接受char*类型的赋值,这是因为类CString的对象在被赋值的时候会自动的将char*类型的变量做一个转换(这个转换是默认),所以达到了效果

3.需要注意的一点是:  c和c++语言本身都没有字符串变量这种类型   常用的CString、string都是微软MFC或标准库后来提供的 

4.c++中,在进行字符串的比较时,一般使用strcmp进行比较  或者  将字符串赋值给CString或者string等类,再进行比较(如(3)的做法就可以  或者   进行转换(CString)it->chOcrFlag也可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值