3

有人可以解释一下 char * 和 CString 之间的区别和关系吗?...谢谢。

4

7 回答 7

2

a CString 将是一个数组,charachar*将是指向数组的指针char,您可以使用它来迭代字符串的字符。

实际上来自MSDN

CString是基于TCHAR数据类型的。如果符号_UNICODE是为你的程序定义的,TCHAR则定义为 type wchar_t,一个 16 位的字符类型;否则,它被定义为 char,即普通的 8 位字符类型。那么,在 Unicode 下,CString对象由 16 位字符组成。如果没有 Unicode,它们由 8 位 char 类型组成。

于 2013-03-13T10:27:23.413 回答
2

有几个重要的区别。

char *是指向 的指针char。通常你不能说它是单个字符还是字符串的开头,以及长度是多少。所有这些都由程序逻辑和一些约定(即标准 C 函数)决定,喜欢const char *用作输入。您需要手动管理为字符串分配的内存。

CString是一个宏。根据您的程序编译选项,可以将其定义为CStringACStringW类。有区别也有相似之处。

不同之处在于CStringA操作非Unicode数据(类似于char*),并且CStringW是Unicode字符串(类似于wchar_t*)。

然而,这两个类在字符串操作和存储管理方面是等价的。它们更接近标准 C++std::stringstd::wstring类。

除此之外,两者都CStringA提供CStringW将字符串转换为 Unicode 格式和从 Unicode 格式转换的功能。

于 2013-03-13T10:33:21.580 回答
1

CString 是一系列 TCHAR-s 而不是 char*。主要区别在于,如果定义了 UNICODE,CString 将是 wchar 的序列。实际上取决于该宏 CString 将被 tpyedef -ed 到 CStringA 或 CStringW。另一个主要区别是 CString 是一个,而 char* 只是一个指向字符的指针。

于 2013-03-13T10:27:39.167 回答
1

根据 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 *

于 2013-03-13T10:29:11.827 回答
1

ACString是一个类,并提供了许多 a 没有的功能char *。Achar *只是一个指向 char 或 chars 数组的指针。

CString 包含一个与 char * 大致相同的缓冲区:LPTSTR GetBuffer( int nMinBufLength );

LPTSTR对于和char *go herehere之间的区别

于 2013-03-13T10:33:01.527 回答
1

CString 是一个包含不同功能的类.. MSDN

char * 只是一个常规的 c++ 数据类型。

CString 主要用于 MFC 应用程序。

于 2013-03-13T10:41:40.380 回答
0

CString 是一个围绕 char* 的包装类,用于提供一些有用的附加功能并对用户隐藏内存分配/释放。在性能方面没有太大区别,因此如果您使用 MFC 类,您不妨使用 CString。

于 2013-03-13T10:27:32.740 回答