有什么区别以及char和CString的关系

时间:2013-03-13 10:24:26

标签: c++ visual-c++ mfc

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

7 个答案:

答案 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是一个宏。根据您的程序编译选项,可以将其定义为CStringACStringW类。存在差异和相似之处。

不同之处在于CStringA使用非Unicode数据(类似于char*),而CStringW是Unicode字符串(类似于wchar_t*)。

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

除此之外,CStringACStringW都提供了将字符串转换为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 );

对于LPTSTRchar *之间的区别,请转到herehere

答案 5 :(得分:1)

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

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

CString主要用于MFC应用程序。

答案 6 :(得分:0)

CString是一个围绕char *的包装类,用于提供一些有用的附加功能,并隐藏用户的内存分配/释放。 性能方面没有太大区别,所以如果你使用的是MFC类,你也可以使用CString。