是你自己的bug罢了
要知道 字符串 是以0为结束符的.
在tmp.Replace("B", 0);时, tmp已经变成了A0CA0C,
这样在printf  tmp 时,它可不会管你的string到底有多长,一律以0为结束符

解决方案 »

  1.   

    非也,
    如果你想完成这样的操作:截去字符串str中"B"以后的所有字符,你可以
    这样写:str.Replace("B", 0);
    但不能这样写str.Replace('B', 0);
    因为第二种写法会造成str记录长度与实际长度不一至!
      

  2.   

    这应该是MFC的BUG
    函数int Replace(TCHAR chOld, TCHAR chNew);
    未考虑chNew为0的特殊情况
      

  3.   

    我同意老兄的看法,这应该是BUG,CString的字符串长度未被更新。
    但tmp.Replace('B',0);中用“\0”来代替的确比较特殊,一般可能不会有人这样做!所以这个BUG可以理解。
    只不过tmp.Replace("B", 0);有点奇怪了,因为参数应为tchar,而“B”本身就不符合,所以我认为这个参数有效性判断有点不对头,的出的结果就更不对头了,因为“0”就应该结束,可........,这可能才更算BUG?
      

  4.   

    你想完成这样的操作:截去字符串str中"B"以后的所有字符,你可以.................................
    使用别的办法,这样可能回浪费内存!
      

  5.   

    其实只有在定义UNICODE时TCHAR才被解释为wchar_t,否则TCHAR与char等效(这个
    宏可以从VC中查到)