一、基础
- ANSI与Unicode两种格式编码
- ANSI字符串使用W标识(eg. W"myStr"),Unicode字符串使用L标识(eg. L"myStr")
- _T() 表示有限编译成Unicode,否则编译成ANSI (也可写成 TEXT, _TEXT)
- TCHAR:由define定义
定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen
没定义_UNICODE宏时,TCHAR = char,_tcslen =strlen - strsafe.h中定义了安全的字符串操作函数
字符:
声明: char wchar_t()
C语言函数(不安全): strlen wcslen| _tcslen
|Windows函数(安全): _tcscpy_s
字符串:
C语言 : StringCChCat(指定字符数) StringCbCat(指定字节数)
Windows :CompareString
二、表示
L——long
P——指针
T——_T() 宏
C——常量
STR——字符串
VC | 表示 |
---|---|
LPSTR | char* |
LPCSTR | const char * |
LPWSTR | wchar_t * |
LPCWSTR | const wchar_t * |
LPTSTR | 定义了UNICODE宏为wchar_t*;没定义UNICODE宏为char* |
LPCTSTR | 定义了UNICODE宏为const wchar_t*;没定义UNICODE宏为const char* |
凡是有T的则根据是否定义UNICODE而定,W的则会定义为UNICODE版本
三、一些头文件
1、char类型 (有新旧两个版本文件头,结尾有’\0’)
<string.h> 旧C头文件无class;
参考:https://www.runoob.com/cprogramming/c-standard-library-string-h.html
<cstring> 旧C头文件std版本;
size_t; memchr; memcmp; memcpy;
memmove; memset; strcat; strchr;
strcmp; strcoll; strcpy; strcspn;
strncmp; strncpy; strpbrk; strrchr;
strspnstrstr; strtok; strxfrm;
2、string类型
<string> 包含std的C++头文件,有string类
参考:http://c.biancheng.net/view/1441.html
3、CString类型
<atlstr.h> 非MFC版本,eg.控制台程序
<afxstr.h> MFC版本
参考:https://docs.microsoft.com/zh-cn/cpp/atl-mfc-shared/basic-cstring-operations?view=vs-2019
在VC++中微软定义了CStringT类(是class不是类型)用于操作可变长度的字符串
参考: https://docs.microsoft.com/zh-cn/cpp/atl-mfc-shared/reference/cstringt-class?view=vs-2019
四、转换
CString类型有GetBuffer()方法,返回类型为LPTSTR(char*/wchar_t* 无const)
string类型有c_str()方法,返回类型为const char *