我的代码如下:CString str;
..........
TrimRight(m_path.Right(1));
..........这段代码用于一个循环中,作用是从字串右边开始逐个删掉字符,直到碰上某个字符就停止。但如果str包含了中文字符的话,比如"123456中abcd"这样的一个字符串,则str只能被执行到"123456中"这样的情况,str.TrimRight(str.Right(1));反复的执行却不能把"中"给去掉,形成了死循环。开始的时候以为"中"占了两个字节,于时把TrimRight(m_path.Right(1));成了TrimRight(m_path.Right(2)),甚至把数字改到10都不能跳过"中"。
不解,请高手指点,不胜感激。
..........
TrimRight(m_path.Right(1));
..........这段代码用于一个循环中,作用是从字串右边开始逐个删掉字符,直到碰上某个字符就停止。但如果str包含了中文字符的话,比如"123456中abcd"这样的一个字符串,则str只能被执行到"123456中"这样的情况,str.TrimRight(str.Right(1));反复的执行却不能把"中"给去掉,形成了死循环。开始的时候以为"中"占了两个字节,于时把TrimRight(m_path.Right(1));成了TrimRight(m_path.Right(2)),甚至把数字改到10都不能跳过"中"。
不解,请高手指点,不胜感激。
..........
str.TrimRight(m_path.Right(1));
..........这段代码用于一个循环中,作用是从字串右边开始逐个删掉字符,直到碰上某个字符就停止。但如果str包含了中文字符的话,比如"123456中abcd"这样的一个字符串,则str只能被执行到"123456中"这样的情况,str.TrimRight(str.Right(1));反复的执行却不能把"中"给去掉,形成了死循环。开始的时候以为"中"占了两个字节,于时把str.TrimRight(m_path.Right(1));成了str.TrimRight(m_path.Right(2)),甚至把数字改到10都不能跳过"中"。
不解,请高手指点,不胜感激。
这样的字符串处理起来比较复杂。要么就编成UNICODE版本吧,所有的内部字符都是2byte的,这样处理起来方便些,你的程序也不需要判断IsDBCSLeadByte了:)
编成UNICODE的方法:
1、在工程setting中C/C++的Preprocessor definitions中,加上_UNICODE,UNICODE两个宏
2、在工程setting中Link的Entry-point symbol中填写wWinMainCRTStartup这样在编译一边,调试一下吧