WINDOWS编程字符串类型

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没有遵守那个标准。

 

3 除了上面的函数,还有

CString(根据UNICODE宏区分ANSI/UNICODE),TCHAR,WCAHR,CHAR,wstring, string,wchar_t

 

4 实践:

TEXT,  _T  TCHAR windows定义这些宏是为了屏蔽ascii和unicode的区别,打到自适应的效果

个人喜欢直接显示调用API,直接调用A,W函数,而不是T函数

 

 

 

你可能感兴趣的:(windows)