2.字符和字符串处理
--->使用Unicode 不要使用ANSI;,除非是提供给其他开发人员使用的DLL,才考虑提供UNICODE 和ANSI;
作者推荐的基本准则:
--》开始将文本字符串想象为字符的数组,而不是char或字节的数组。
--》用明确的数据类型(BYTE 和PBYTE)来表示字节,字节指针和数据缓冲区
--》用通用的数据类型(TCHAR /PTSTR) 来表示文本字符和字符串。
--》用TEXT 或_T宏来表示字面量字符和字符串,单位了保持一致性和更好的可读性,避免两者混用
--》执行全局替换(例如:用PTSTR 替换PSTR)
--》修改与字符串有关的计算.(_countof(szBuffer) 不要用sizeof(szBuffer) 使用malloc(nCharacters*sizeof(TCHAR)) 而不是 malloc(nCharacters) )
--》避免使用printf系列函数,尤其不要用%s %S字段类型来进行ansi和unicode的转换。使用(MultiByteToWideChar和WideCharToMultiByte)
--》UNICODE 和_UNICODE符号要么同时指定,要么都不指定
-----对于字符串处理函数,应该遵循以下基本规则
--》始终使用安全的字符串处理函数。比如后缀为_s或者前缀为StringCch的函数。(后者主要在我们向明确控制截断时使用,前者则是不是明确控制截断时使用更多)
--》不要使用不安全的C运行库字符串处理函数(使用=》memcpy_s,memmove_s,wmemcpy_s,wmemmove_s) 略(_STDC_WANT_SECURE_LIB_)
--》略(/GS)
--》不要用Kernel32方法来进行字符串处理,例如lstrcat,lstrcpy
--》在应用程序代码中,需要比较两种字符串.使用(CompareStringOrdinal 或者 CompareString(EX))
1 /******************************************************************** 2 created: 2020/07/06 10:53 3 filename: H:\2020-2021\Windows核心编程\Windows核心编程\2.字符和字符串处理\2.字符和字符串处理.cpp 4 file base: 2.字符和字符串处理 5 author: 大海 6 7 purpose: Practice makes perfect. 8 *********************************************************************/ 9 #include <iostream> 10 #include <windows.h> 11 int main() 12 { 13 14 15 //Unicode 字符和字符串 字符组成前L是通知编译器该字符串是UNICODE字符串 ,会使用UTF-16来编码 16 TCHAR c = 'A'; 17 TCHAR szBuffer[100] = TEXT("CSTRING"); 18 PTSTR p =(PTSTR) malloc(100*sizeof(TCHAR)); 19 memcpy_s(p, 100 * sizeof(TCHAR),szBuffer, 100 * sizeof(TCHAR)); 20 printf_s("%ws %ws\n",p,szBuffer); 21 getchar(); 22 23 return 0; 24 }

浙公网安备 33010602011771号