CString const char*与char*之间的转换关系

    xiaoxiao2021-03-25  92

    发现一篇好文,原文看得很费眼故而整理一下, 原文 CString 是个好东西,有很多好用的成员函数,并且动态分配内存空间。但在 MFC 学习初期,容易把 CString 与 const char*,char* 混淆。遇到三种类型数据转换时,总是得过且过。下面就剖析一下三者之间的转换关系与方法。

    1、CString 与 const char*(LPCTSTR---是在Unicode环境下const char*的宏定义)

    CString 类提供一个const char*()把 CString 类型转换为 LPCTSTR 类型。 比如 AfxMessageBox() 的使用,可以采用: char szMessageText[] = "Unknown error"; AfxMessageBox(szMessageText); 也可以这样: CString strMessageText("Unknown ;error"); AfxMessageBox(strMessageText); CString 类也提供了一个构造函式把 LPCTSTR 类型转换为 CString 类型。比如: CString strTruth; strTruth += " is alive";

    2、CString与char*

    调用 CString::GetBuffer 在Buffer 中开辟一定大小的空间并返回一个 char*。注意要在使用完 char* 后要调用 CString::ReleaseBuffer以此保证 CString 的动态性。例如:  CString strTest("test"); strncpy(strTest.GetBuffer(5), "T", 1); strTest.ReleaseBuffer(); ASSERT(strTest == "Test");

    3、编写以字符串为参数的函数所遵循的规则:

    a、如果函数不改写字符串的内容并且要调用C Runtime的函数,那么函数要用const char*类型参数; b、如果函数不改写字符串的内容并且要调用CString的成员函数,那么函数要用const CString&类型参数; c、如果函数要改写字符串的内容,那么函数要用CString&类型参数。
    转载请注明原文地址: https://ju.6miu.com/read-21769.html

    最新回复(0)