zoukankan      html  css  js  c++  java
  • CString,string,char*之间的转换

    这几天经常用到的,不如记下吧。

    这三种类型各有各的优点,比如CString比较灵活,是基于MFC常用的类型,安全性也最高,但可移植性最差。string是使用STL时必不可少的类型,所以是做工程时必须熟练掌握的;char*是从学习C语言开始就已经和我们形影不离的了,有许多API都是以char*作为参数输入的。所以熟练掌握三者之间的转换十分必要。

    以下我用简单的图示指出三者之间的关系,并以标号对应转换的方法。

    change.JPG

    1 string to CString   

      CString.format("%s",string.c_str()); 

    2 CString to string

    string str(CString.GetBuffer(str.GetLength()));

    3 string to char *

    char *p=string.c_str();

    4 char * to string

    string str(char*);

    5 CString to char *

    strcpy(char,CString,sizeof(char));

    6 char * to CString

    CString.format("%s",char*);

     CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *转换时,要把char定义成为const char*,这样是最安全的。

    Feedback

    # re: CString,string,char*之间的转换[未登录]  回复  更多评论   

    2008-04-27 09:21 by kevin
    烂!都用不了的!

    # re: CString,string,char*之间的转换[未登录]  回复  更多评论   

    2008-05-17 18:23 by yuancheng
    如果程序是用的 unicode字符集的话,这些函数就会报错,不是 unicode字符集的话可以的

    # re: CString,string,char*之间的转换  回复  更多评论   

    2008-06-04 22:21 by anonymous
    2 CString to string

    string str(CString.GetBuffer(str.GetLength()));


    不对,这里用了GetBuffer后不ReleaseBuffer会造成内存泄露的,而且用GetBuffer容易造成CString字符串内容被错误修改,所以提取源字符串内容应使用:(LPCTSTR)CString变量名

    # re: CString,string,char*之间的转换  回复  更多评论   

    2008-07-15 22:01 by lidu
    没问题的,unicode下照用,加个_T()宏就行了,像这样子_T("%s")

    # re: CString,string,char*之间的转换  回复  更多评论   

    2008-10-22 16:26 by aliao
    5 CString to char *

    strcpy(char,CString,sizeof(char)); 这里的参数是不是写借了?

    # re: CString,string,char*之间的转换  回复  更多评论   

    2009-11-05 17:10 by iccolor
    char *p=string.c_str();
    这个很好使,关键是你要加入库文件头。

    # re: CString,string,char*之间的转换  回复  更多评论   

    2009-11-06 09:41 by 溪流
    LZ 也没有搞得很清楚么。。。

    另外,CString 可能是 CStringW/CStringA,在与 string 转换时,如果是 CStringW,还涉及编码转换问题。下面以 CStringA 来说明。

     

    1 string to CString  

      CString.format("%s",string.c_str());

     

    CStringA = string.c_str() 就可以了

     

    2 CString to string

    string str(CString.GetBuffer(str.GetLength()));

     

    GetBuffer 有参数的话,可能导致内部的分配空间动作,要进行后续 ReleaseBuffer 操作。


    string = CStringA


    string = CStringA.GetBuffer();

     

    3 string to char *

    char *p=string.c_str();

    4 char * to string

    string str(char*);

    5 CString to char *

    strcpy(char *,CString,sizeof(char));

    按照 3 风格,这里应该 char *  = CStringA; 或者 char *p = CStringA.GetBuffer();

     

    6 char * to CString

    CStringA = char * 就可以了
  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/zhwl/p/2760054.html
Copyright © 2011-2022 走看看