有人可以解释一下 char * 和 CString 之间的区别和关系吗?...谢谢。
7 回答
a CString 将是一个数组,char
achar*
将是指向数组的指针char
,您可以使用它来迭代字符串的字符。
实际上来自MSDN:
CString
是基于TCHAR
数据类型的。如果符号_UNICODE
是为你的程序定义的,TCHAR
则定义为 typewchar_t
,一个 16 位的字符类型;否则,它被定义为 char,即普通的 8 位字符类型。那么,在 Unicode 下,CString
对象由 16 位字符组成。如果没有 Unicode,它们由 8 位 char 类型组成。
有几个重要的区别。
char *
是指向 的指针char
。通常你不能说它是单个字符还是字符串的开头,以及长度是多少。所有这些都由程序逻辑和一些约定(即标准 C 函数)决定,喜欢const char *
用作输入。您需要手动管理为字符串分配的内存。
CString
是一个宏。根据您的程序编译选项,可以将其定义为CStringA
或CStringW
类。有区别也有相似之处。
不同之处在于CStringA
操作非Unicode数据(类似于char*
),并且CStringW
是Unicode字符串(类似于wchar_t*
)。
然而,这两个类在字符串操作和存储管理方面是等价的。它们更接近标准 C++std::string
和std::wstring
类。
除此之外,两者都CStringA
提供CStringW
将字符串转换为 Unicode 格式和从 Unicode 格式转换的功能。
CString 是一系列 TCHAR-s 而不是 char*。主要区别在于,如果定义了 UNICODE,CString 将是 wchar 的序列。实际上取决于该宏 CString 将被 tpyedef -ed 到 CStringA 或 CStringW。另一个主要区别是 CString 是一个类,而 char* 只是一个指向字符的指针。
根据 TCHAR 的类型,CString 可以是 CStringA 或 CStringW。
也就是说,CString
它是一个字符数组的包装器,它使您能够轻松地将该字符数组视为字符串,并以与字符串类型相关的方式对其进行操作。
对于它们之间的关系,这里有一个很容易说明的东西。您可以像这样在 char * 和 CString 之间进行转换:
CString str = "abc"; // const char[3] or char * to CString
和
const char * p = str.Get()
// CString 到 const char *
CString 是一个围绕 char* 的包装类,用于提供一些有用的附加功能并对用户隐藏内存分配/释放。在性能方面没有太大区别,因此如果您使用 MFC 类,您不妨使用 CString。