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