有人可以解释一下 char * 和 CString 之间的区别和关系吗?...谢谢。
7 回答
a CString 将是一个数组,charachar*将是指向数组的指针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。