一. 字符集简史
查看百度百科资料
二、各种字符串处理函数库
1 C运行库对字符串的处理:
str*系列: C运行库早期使用strlen strcpy等str*系列函数对char类型的字符串进行处理。
wcs*系列: C编译器内置了wchar_t这个16位宽字节类型后,使用新的wcslen wcscpy等wcs*系列的函数对wchar_t类型的字符串进行处理。
_tcs*系列: C运行库定义了宏_tcslen _tcscpy等_tcs*系列的宏定义,_tcs*系列函数在编译时根据是否预定义了宏_UNICODE而确定是采用wcs*系列函数,否则采用str*系列函数。
_tcs*_s系列: C运行库的最新安全字符串函数,为了防止缓冲区溢出而定义的新函数。
2 windows对字符串的处理:
Windows开发团队在winnt.h中定义了新的数据类型CHAR(char), WCHAR(wchar_t), TCHAR,TCHAR最终在编译时根据是否预定义了UNICODE宏而确定是CHAR还是WCHAR。
lstr*a系列: 在windows操作系统的Kernel32.dll中定义,处理CHAR类型的字符串,其实是对lstr*w的一层包装。
lstr*w系列: 在windows操作系统的Kernel32.dll中定义,处理WCHAR类型的字符串。
lstr*系列: lstr*系列函数也是在编译时才根据是否预定义了UNICODE宏来确定采用lstr*a系列函数,还是lstr*w系列函数。
个人推荐用lstr*系列,因为这个是windows api,这样写出来的程序不用把C运行库链接进来。
有个需要注意的是,C运行库的_UNICODE和Windows的UNICODE,两个宏,要么同时定义,要么同时不定义。C运行库前缀下划线是为了遵守那个该死的C++标准(对于不属于C++标准的宏加下划线),而Windows没有遵守那个标准