【发布时间】:2013-03-01 05:28:13
【问题描述】:
谁能解释一下 char * 和 CString 之间的区别和关系?...谢谢。
【问题讨论】:
-
CString旨在供 C++ 代码使用,而原始的char*基本上不应该在 C++ 代码中使用。
标签: c++ visual-c++ mfc
谁能解释一下 char * 和 CString 之间的区别和关系?...谢谢。
【问题讨论】:
CString 旨在供 C++ 代码使用,而原始的 char* 基本上不应该在 C++ 代码中使用。
标签: c++ visual-c++ mfc
CString 将是char 的数组,char* 将是指向char 数组的指针,您可以使用它来迭代字符串的字符。
其实来自MSDN:
CString基于TCHAR数据类型。如果为你的程序定义了符号_UNICODE,则TCHAR定义为类型wchar_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 格式的功能。
【讨论】:
【讨论】:
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。
【讨论】: