• 推荐的字符和字符串处理方法


    最好将应用程序转换为支持Unicode的形式。 遵循的基本准则如下:

    1.开始将文本字符串想象为字符的数组,而不是char或字节的数组

    2.用通用数据类型(如TCHAR/PTSTR)来表示文本字符和字符串

    3.用明确的数据类型(如BYTE和PBYTE)来表示字节,字节指针和数据缓冲区

    4.用TEXT或_T宏来表示字面量字符和字符串,但为了保持一致性和更好的可读性,请避免两者混用

    5.执行全局替换(例如,用PTSTR替换PSTR)

    6.修改于字符串有关的计算。例如,函数经常希望我们传给它缓冲区大小的字符数,而不是字节数,这意味着我们应该传入_countof(szBuffer),而不是sizeof(szBuffer)。而且,如果需要为一个字符串分配一个内存,而且知道字符串中字符数,那么要记住内存是以字节来分配的。这意味着我们必须调用malloc(nCharacters*sizeof(TCHAR)),而不是调用malloc(nCharacgers)。在前面列出的所有基本准则中,这是最难记住的一条,最好定义一个宏来避免犯错:

    1. #define chmalloc(nCharacters) (TCHAR*)malloc(nCharacters*sizeof(TCHAR)) 

     7.避免使用printf系列函数尤其是不要用%s和%S字段类型来进行ANSI于Unicode字符串之间的相互转换。正确的做法是使用MultiByteToWideChar和WideCharToMultiByte函数

    8.UNICODE和_UNICODE符合要么同时指定,要么都不指定

    对于字符串处理函数,应遵循以下基本准则。

    1.始终使用安全的字符串处理函数,比如后缀为_s的函数,或者前缀为StringCch的函数,后者主要在我们明确控制截断的时候使用;如果不想明确控制截断,则首选前者。

    2.不要使用不安全的C运行库字符串函数。

    3.利用/GS和/RTCs编译器标志来自动检测缓冲区溢出。

    4.不要用kernel32方法来进行字符串处理,比如lstrcat 和 lstrcpy。

    5.比较两种字符串,应使用CompareStringOrdinal来进行比较,因为他非常快,不会考虑用户的区域设置。
     

  • 相关阅读:
    vue 富文本编译器 vue-quill-editor
    vue-拖拽的使用awe-dnd
    Dapper是什么?
    如何运用领域驱动设计
    面试官问我MySQL索引,我
    MySQL:你知道什么是覆盖索引吗?
    mysql覆盖索引与回表
    C#.NET 字符串转数组,数组转字符串
    MYSQL如何让主键使用BTREE索引
    MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
  • 原文地址:https://www.cnblogs.com/profession/p/4464472.html
Copyright © 2020-2023  润新知