程序中定义了
CString m_strReceived;
char readbuf[512];
想把readbuf接到m_strReceived后面,readbuf中有字符'\0',用m_strReceived+=readbuf得不到正确的结果,用for循环,m_strReceived+=readbuf[i]就可以。
但如果我想用m_strReceived.Right(m_size)来截取一部分字符串,并且这部分字符串中正好有字符'\0'的话,返回的就只是到字符'\0'为止,不能得到正确的结果。大虾们有什么好的建议?谢谢。

解决方案 »

  1.   

    \0说明字符串结束,所以CString对遇到\0时的处理就是跳出这是正常的。如果你想每次都拷贝512个char的话,可以用memcpy
      

  2.   

    建议就是不要使用CString,这个是带有字符串语义的一个类,并不是一个通用的byte container,用这个来存放字节显然是欠妥的。在readbuf不具有字符串语义的时候,两个对象之间的数据交换就会出现问题(想也知道,一个只说英语的人和另外一个只说中文的人显然是说不到一起去的……)。要不然你就换容器,譬如std::vector,std::deque之类的容器,虽然会损失一定的灵活性,但是程序的正确性更重要。
      

  3.   

    对这个问题做一下修改:
    m_strReceived.Right(m_size),可能结果也是正确的,只是我获取长度m_strReceived.GetLength();时,得到的是到第一个'\0'为止的长度,那么请问如何可以手动修改CString类中的字符串长度呢?
      

  4.   

    首先强调一下,CString是一个字符串包装类,它就是用来处理字符串的。
    字符串结束标志为\0,所以CString遇到\0后是不可能再继续的。建议同newbiestar() ,不要用CString处理你这种情况。
      

  5.   

    学习CFileDialog的szFilter,将\0用一个特殊符号代替,如|,最后再恢复回来
      

  6.   

    自己做个函数就搞定了,不要用CString 了再自己写一个GetRight的函数就是了, 用CString 是不可能的,其有效意义就是以'\0'结束的,所以你怎么都没有办法的,这个问题就是自己写个函数就OK了,别用mfc了