char和CString的区别和关系是什么?

What is the difference and the relationship of char and CString

本文关键字:是什么 关系 CString char 区别      更新时间:2023-10-16

谁能给我解释一下char *和CString之间的区别和关系?谢谢。

有几个重要的区别。

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

CString是一个宏。根据您的程序编译选项,它可以定义为CStringACStringW类。有异同。

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

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

除此之外,CStringACStringW都提供了将字符串转换为Unicode格式的功能。

CString将是char的数组,char*将是指向char数组的指针,可以迭代字符串中的字符。

实际上来自MSDN:

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

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

char *只是一个普通的c++数据类型。

CString主要用于MFC应用程序。

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

根据char的类型,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 *

CString是一个类,它提供了许多char *没有的功能。char *只是一个指向char或char数组的指针。

CString包含一个与char *: LPTSTR GetBuffer( int nMinBufLength );

大致相同的缓冲区

LPTSTRchar *的区别在这里和这里

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