推荐的字符和字符串处理方式

  • 開始将文本字符串想象为字符的数组,而不是 char 或字节的数组。
  • 用通用数据类型(如 TCHAR/PTSTR )来表示文本字符和字符串。
  • 用明白的数据类型(如 BYTE 和 PBYTE )来表示字节,字节指针和数据缓冲区。
  • 用 TEXT 或 _T 宏来表示字面量字符和字符串。但为了保持一致性和更好的可读性,请避免两者混用;
  • 运行全局替换(比如用 PTSTR 替换 PSTR ) ;
  • 改动与字符串有关的计算。比如,函数常常希望我们传给它缓冲区打小的字符数。而不是字节数。这意味着我们应该传入 _countoof(szBuffer), 而不是 sizeof(szBuffer) 。

    并且。假设须要为一个字符串分配一个内存块,并且知道字符串中的字符数,那么要 记住内存是以字节来分配的 。

  • 避免使用 printf 系列函数,正确的做法是使用 MultiByteToWideChar 和WideCharToMultiByte 函数。

  • Unicode和_ Unicode符号要么同一时候指定。要么都不指定。

对于字符串处理函数,应该遵循下面基本准则:

  • 始终使用安全的字符串处理函数,比方后缀为 _s 的函数,或者前缀为 StringCch 的函数。后者主要在我们想明白控制截断的时候使用了假设不像明白控制截断,首选前者。
  • 利用 /GS 和 /RTCs 编译器标志来自己主动检測缓冲区溢出。

  • 不要使用 Kernel32 方法来进行字符串处理,比方 lstrcat 和 lstrcpy 。
  • 在应用程序的代码中,须要比較两种字符串,应使用 CompareStringOrdinal(注冊表)CompareString(用户字符串) 来进行比較。

《解读window核心编程》 之 字符和字符串处理方式的更多相关文章

  1. 《解读window核心编程》 之 进程

    1.         进程是执行文件的运行时形态.包括两部分:内核数据(对应内核对象).地址空间(包括执行文件代码和栈堆等动态内存). 2.         把VC的“系统-子系统”值删除掉,即不指定 ...

  2. 《解读window核心编程》 之 注冊表

    1 注冊表的作用及组织形式 Windows系统使用注冊表来存储系统和应用程序配置数据.非常多系统和应用程序重要的配置的信息都存储在注冊表中. 注冊表是一种以树型结构组织的数据库.树的每个节点称 作键( ...

  3. Windows核心编程笔记之处理字符串

    0x01 ANSI 和宽字符定义 // ANSI 字符定义 CHAR varChar_1 = 'a'; // #typedef char CHAR CHAR varChar_2[] = "A ...

  4. windows核心编程-信号量(semaphore)

    线程同步的方式主要有:临界区.互斥区.事件.信号量四种方式. 前边讲过了互斥器线程同步-----windows核心编程-互斥器(Mutexes),这章我来介绍一下信号量(semaphore)线程同步. ...

  5. java.sql.Exception:setString 只能处理少于 32766 个字符的字符串

    java.sql.Exception:setString 只能处理少于 32766 个字符的字符串 解决方式是 : 升级ojdbc的版本,   将原来的 ojdbc14_10.2.0.2.0.jar ...

  6. windows核心编程---第二章 字符和字符串处理

        使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...

  7. Windows核心编程第二章,字符串的表示以及宽窄字符的转换

    目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 U ...

  8. Windows核心编程:第2章 字符和字符串处理

    Github https://github.com/gongluck/Windows-Core-Program.git //第2章 字符和字符串处理.cpp: 定义应用程序的入口点. // #incl ...

  9. 用Java编程找到两个字符串中共有的字符

    这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...

随机推荐

  1. Hibernate(十五)注解

    一.Hibernate注解 使用注解的方式来注释类和属性,从而完成对象和关系的映射 二.步骤 三.注解标签 四.查询

  2. HTML5 PACS 医学成像

    http://ivmartel.github.io/dwv/ http://oviyam.raster.in/oviyam2.html https://github.com/ivmartel/dwv ...

  3. 转:Python 从FTP 下载数据的例子

    <hadoop权威指南>的天气数据可以在ftp://ftp3.ncdc.noaa.gov/pub/data/noaa下载,在网上看到这个数据好开心,打开ftp发现个问题,呀呀,这么多文件啊 ...

  4. PHP 表单和用户输入

    PHP 的 $_GET 和 $_POST 用于检索表单中的值,比如用户输入. index.php页面 <?php  /*时间:2014-09-14  *作者:葛崇  *功能:表单传值小实例  * ...

  5. MVC日期和其它字符串格式化

    -- (月份位置不是03) string.Format("{0:D}",System.DateTime.Now) 结果为:2009年3月20日 : :: -- : -- :: st ...

  6. 为什么要有GDT

    逻辑地址-------------->线性地址------------> 物理地址   分段 分页 GDT是[gobal (segment) descriptor table]的缩写,它保 ...

  7. UI复习练习_优酷布局

    还记得前一周,细致看了一下我自己的代码,特意看了下代码规范,一个好的代码习惯就应该慢慢增加自己寻常练习中. 看看UI吧 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5 ...

  8. samba温故知新

    SAMBA服务器可以实现Windows主机和Linux主机共享资源互访的功能,即在Windows下可以通过网上邻居访问Linux操作系统中SAMBA服务器共享的文件夹,当然,Linux操作系统之间同样 ...

  9. iOS-高仿通讯录之商品索引排序搜索

    概述 TableView添加右侧索引, 将数据按照索引分组排序, 并添加搜索功能且在搜索界面复用当前页面. 详细 代码下载:http://www.demodashi.com/demo/10696.ht ...

  10. Apache Hadoop 3.0新版本介绍及未来发展方向

    过去十年,Apache Hadoop从无到有,从理论概念演变到如今支撑起若干全球最大的生产集群.接下来的十年,Hadoop将继续壮大,并发展支撑新一轮的更大规模.高效和稳定的集群. 我们此次将向大家全 ...