Windows编程中不同的char类型

Yon*_*ing 3 c c++

最近,我在windows平台上遇到了关于char/string的一些任务.我看到它们是不同的char类型,如char,TCHAR,WCHAR,LPSTR,LPWSTR,LPCTSTR.有人能给我一些有关它的信息吗?以及如何使用常规char和char*.我对这些类型感到困惑?

最好的祝福,

In *_*ico 13

它们记录在MSDN上.这里有几个:

  • TCHAR:定义了一个WCHARif UNICODE,CHAR否则定义了.
  • WCHAR:16位Unicode字符.
  • CHAR:8位Windows(ANSI)字符.
  • LPTSTR:定义LPWSTRif UNICODE,LPSTR否则定义.
  • LPSTR:指向以null结尾的8位Windows(ANSI)字符串的指针.
  • LPWSTR:指向以null结尾的16位Unicode字符串的指针.
  • LPCTSTR:定义LPCWSTRif UNICODE,LPCSTR否则定义.
  • LPCWSTR:指向由以空字符结尾的16位Unicode字符的常量字符串的指针.
  • LPCSTR:指向由8位Windows(ANSI)字符组成的常量以null结尾的字符串的指针.

请注意,这些类型中的一些根据是否UNICODE已经#define'd' 映射到不同的类型.默认情况下,它们会解析为ANSI版本:

#include <windows.h>
// LPCTSTR resolves to LPCSTR
Run Code Online (Sandbox Code Playgroud)

在您#define UNICODE之前#include <windows.h>,他们解析为Unicode版本.

#define UNICODE
#include <windows.h>
// LPCTSTR resolves to LPCWSTR
Run Code Online (Sandbox Code Playgroud)

它们实际上typedef是C和C++语言中的一些基本类型.例如:

typedef char CHAR;
typedef wchar_t WCHAR;
Run Code Online (Sandbox Code Playgroud)

在像Visual C++这样的编译器中LPCSTR,a和a const char*或a LPCWSTR和a 之间确实没有区别const wchar_t*.然而,编译器之间可能会有所不同,这就是为什么这些数据类型首先存在的原因!

它有点像Windows API的等价物<cstdint><stdint.h>.Windows API具有其他语言的绑定,如果不需要,具有已知大小的数据类型很有用.