不行,CString内部设计安全问题不会把内部缓冲指针抛出来让你改的,最多是memcpy

解决方案 »

  1.   

    可是这样的话,我感觉用CString效率就比较低了。
    难道说CString不能用在效率要求比较高的场合吗,特别是有了char *,然后想通过CString的算法的时候?
      

  2.   

    CString内部算法需要修改指针,你把指针固定了怎么改?再说C/C++库函数已经有足够的字符串函数,学会应用这些函数吧,没有CString不也照样编程序。
      

  3.   

    CString本来也不是为了效率而设计的
      

  4.   


    CString是不会影响效率的,就看你怎么用了。比如,CString.SetLenghtGetBuffer可以当成一个char *使用,而没必要用另外一个char ×。
    实际使用中要注意的事很多,比如CString的内部地址是浮动的,CString的编码问题,等等。共同学习吧。
      

  5.   

    我看了一下CString类的内部结构,它有一个指向数据的指针m_pchData,但是这个变量是保护类型的,而CString是通过“引用”来管理字符串的,它內部必须建立一个存储空间,而对存储空间的访问可以通过引用计数来控制,这样大量进行数据操作时时它很能节省内存资源并且执行效率高.你要达到的目的只会破坏它的结构,而引起问题。
      

  6.   

    你想用CString的哪些功能?MFC中所有的类效率都很低,如果重视效率应该改用其它方法,字符串操作的函数有很多。
      

  7.   

    如果你这个已经存在的字符串前面有16个字节的空间可以利用的话,那可以用它生成一个CStringData结构体,并把计数设为2以防止析构时误删除,最后通过内存偏移计算来生成一个足以以假乱真的CString对象。
    不过一般来说,字符串前面是不会有16个字节空余的,所以基本上没有办法……
    使用C/C++库函数才是最合适的方法。
      

  8.   

    如果你这个已经存在的字符串前面有16个字节的空间可以利用的话,那可以用它生成一个CStringData结构体,并把计数设为2以防止析构时误删除,最后通过内存偏移计算来生成一个足以以假乱真的CString对象。
    不过一般来说,字符串前面是不会有16个字节空余的,所以基本上没有办法……
    使用C/C++库函数才是最合适的方法。
      

  9.   

    如果你这个已经存在的字符串前面有16个字节的空间可以利用的话,那可以用它生成一个CStringData结构体,并把计数设为2以防止析构时误删除,最后通过内存偏移计算来生成一个足以以假乱真的CString对象。
    不过一般来说,字符串前面是不会有16个字节空余的,所以基本上没有办法……
    使用C/C++库函数才是最合适的方法。
      

  10.   

    如果你这个已经存在的字符串前面有16个字节的空间可以利用的话,那可以用它生成一个CStringData结构体,并把计数设为2以防止析构时误删除,最后通过内存偏移计算来生成一个足以以假乱真的CString对象。
    不过一般来说,字符串前面是不会有16个字节空余的,所以基本上没有办法……
    使用C/C++库函数才是最合适的方法。
      

  11.   

    应该反过来思考,由CString维护内存空间CString str;
    psz = str.GetBuffer(20);strcpy(psz, "abc");这样就达到你的要求了
    psz和str都是指向同一内存区域
      

  12.   

    其实是可以的,CString内置默认的内存管理器,只要你自己实现一个IAtlStringMgr接口(内存管理器),就可以在CString的特定构造函数中传递这个接口进去以取代默认的内存管理器。
    IAtlStringMgr接口有几个方法:
    Allocate、Free、Reallocate、GetNilString、Clone
    你可以在分配/释放方法中什么都不用做,分配时只需简单返回已有缓冲区的指针。