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 }

 

posted @ 2020-07-06 12:49  a1094426901  阅读(90)  评论(0)    收藏  举报