我的代码如下: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都不能跳过"中"。
  不解,请高手指点,不胜感激。

解决方案 »

  1.   

    我的代码如下:CString str;
    ..........
       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都不能跳过"中"。
      不解,请高手指点,不胜感激。
      

  2.   

    TrimRight(m_path.Right(1));m_path.Right(1) 取最右面的byteTrimRight.. 然后将这个字符右面的空格去掉..说实话,程序太短了,贴个完整点的吧。如果存在中文,可以使用IsDBCSLeadByte来判断一下字符是否是双字节字符的第一个字符,如果是,那么就2个byte一起处理,如果不是,就处理一个byte。
    这样的字符串处理起来比较复杂。要么就编成UNICODE版本吧,所有的内部字符都是2byte的,这样处理起来方便些,你的程序也不需要判断IsDBCSLeadByte了:)
    编成UNICODE的方法: 
    1、在工程setting中C/C++的Preprocessor definitions中,加上_UNICODE,UNICODE两个宏
    2、在工程setting中Link的Entry-point symbol中填写wWinMainCRTStartup这样在编译一边,调试一下吧