LPSTR和LPWSTR是Win32和VC++所使用的一种字符串数据类型。LPSTR被定义成是一个指向以NULL(‘\0’)结尾的32位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的64位双字节字符数组指针。LPSTR是指指向一个字符串的32位指针,每个字符占1个字节。
类似于:(LPSTR 相当于CHAR *)
char chArray[] = “This is a test”;
char * p = “This is a test”;
或
LPSTR p = “This is a test”;
LPCSTR
是Win32和VC++所使用的一种
字符
串数据类型。LPCSTR被定义成是一个指向以NULL(‘\0’)结尾的
常量
字符的
指针
。LPCSTR是指指向一个常量字符串的32位指针,每个字符占1个字节。(它与LPSTR等同,但不能被其他API函数改变)
类似于:(LPCSTR 相当于CONST CHAR * )
const char* = "yuantianyou ";
LPCSTR a = b;
LPTSTR:每字符可能占1字节或2字节,取决于Unicode是否定义,所有的
字符
串都是用TCHAR来定义的。UNICODE对应的指针是unsigned short*也就是LPWSTR,为了写程序方便微软定义了类型LPTSTR。(当为Unicode时它与LPWSTR等同,当为ANSI时,它与LPSTR等同)。
类似于:(LPTSTR相等于unsigned short* /LPWSTR)
#ifdef _UNICODE的时候
_T就是L
没有#ifdef _UNICODE的时候
_T就是ANSI的。
比如
LPTSTR lpStr = new TCHAR[32];
TCHAR* szBuf = _T("Hello");
LPCTSTR:
LPCTSTR是指“long pointer to a constant generic string”,表示“一个指向一般字符串常量的长指针类型”,与C/C++的const char*相映射,而LPTSTR映射为 char*。
TCHAR:当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。
typedef wchar_t TCHAR;
否则,定义为ANSI版本。
typedef char TCHAR;
在MFC中,凡是用char的地方都可以用TCHAR取代,凡是用char*的地方都可以用LPTSTR来取代,凡是定义在双符号中的字符串常量(如“helloword”)都可用TEXT宏重写。
TEXT(“helloword”);
为支持Unicode做准备,除个别必须使用char或char*的地方外,其他地方请依照如下标准:
1.字符串类型尽量用CString 2.字符类型使用TCHAR 3.字符串数组使用THAR[] 4.字符串指针使用TCHAR* 或 LPTSTR 5.常量字符串指针使用const CHAR* 或LPCSTR 6.字符串常量和字符常量加宏 _T
特别的:
1》CString::Format(_T(" ...."),...)//要加_T
2》LPTSTR等等被多次嵌套定义过的宏尽量少用,用基础类型const CHAR*代替。