总结CString、string、char*

来源:互联网 发布:js获取div name 编辑:程序博客网 时间:2024/04/28 22:13
  • (一)首先说说string和char*:
  • 1、概述
  • 2、二者的相互转化:
  • (二)CString
  • 1、概述
  • 2、CString和其它两者之间的转化
  • (一)首先说说string和char*:

    1、概述

    在C语言中:

    1string是字符串,而char*是字符指针。二者不是在什么时候都等价,当字符指针指向的地址保存了一个字符串(即以‘\0’结尾的一个字符序列)时,可以说它指向了一个字符串,其它情况下则不等价。

    在C++中: string是一个字符容器,它是模板库里的一个扩展模板类,而char是一个基本数据类型(C++的内置类型),二者就更不等价了。其中string有构造函数,char没有构造函数,只可以赋值(char* m=“abc”; string str(m);)

    2、二者的相互转化:

    string转char*:

    1使用c_str()方法。`std::string str="abc"char* p=str.c_str();`

    char*转string:

    1直接使用初始化string s(char *),在不是初始化的地方,最好使用assign();

    (二)CString

    1、概述

    CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作,使得MFC在做字符串操作的时候方便了很多。能体现出 CString 类型方便性特点的一个方面就是字符串的连接,使用 CString 类型,你能很方便地连接两个字符串,正如下面的例子:

    1CString gray("Gray");
    2CString cat("Cat");
    3CString graycat = gray + cat;
    4//then graycat="GrayCat"

    要比用下面的方法好得多:

    1char gray[] = "Gray";
    2char cat[] = "Cat";
    3char * graycat = malloc(strlen(gray) + strlen(cat) + 1);
    4strcpy(graycat,gray);
    5strcat(graycat,cat);

    2、CString和其它两者之间的转化

    CString->std::string 例子:

    1CString strMfc=“test“;
    2std::string strStl;
    3strStl=strMfc.GetBuffer(0);

    unicode情形下:

    1CStringW strw = _T("test");
    2CStringA stra(strw.GetBuffer(0));
    3strw.ReleaseBuffer();
    4 
    5std::string imgpath=stra.GetBuffer(0);
    6stra.ReleaseBuffer();

    std::string->CString 例子:

    1CString strMfc;
    2std::string strStl=“test“;
    3strMfc=strStl.c_str();

    CString->char* 例子:

    强制类型转换LPCTSTR

    1LPCTSTR s;

    或者

    1LPCTSTR(s);

    使用Getbuffer():

    不给 GetBuffer 传递参数时它使用默认值 0,意思是:“给我这个字符串的指针,我保证不加长它”。当调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。 
    必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString 对象.因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。

    view source
    print?
    1LPTSTR p = s.GetBuffer();
    2// do something with p
    3int m = s.GetLength(); // 可能出错!!!
    4s.ReleaseBuffer();
    5int n = s.GetLength(); // 保证正确
    原创粉丝点击