Windows核心编程第二章笔记
来源:互联网 发布:舆情监控软件下载 编辑:程序博客网 时间:2024/05/17 20:22
Microsoft的C/C++编译器定义了一个内建的数据类型wchar_t,它表示一个16位的Unicode(UTF-16)字符。
声明Unicode字符和字符串的方法如下所示:
// A 16-bit characterwchar_t c = L'A';// An array up to 99 16-bit characters and a 16-bit terminating zerowchar_t szBuffer[100] = L"A String";
字符串之前的大写字母L通知编译器该字符串应当编译为一个Unicode字符串。当编译器将次字符串放入程序的数据段时,会使UTF16来编码每个字符,在这个简单的例子中,在每个ASCII字符之间都用一个0来加以区分。
wcslen这个C运行库能返回Unicode字符串的长度
为了使源代码既能用ANSI编译,又能用Unicode编译,还必须包含TChar.h,该文件定义了以下宏:
#ifdef _UNICODE#define _tcslen wcslen#else#define _tcslen strlen#endif
现在,应该在代码中调用_tcslen,如果已经定义了_UNICODE,它会扩展为wcslen,否则,它会扩展为strlen。
现有的每一个函数(如_tcscpy或_tcscat),都有一个对应的新版本的函数。前面的名称相同,但最后添加了一个_s(代表secure)后缀。所有这些新函数都有一个共同的特征,这有待我们进一步解释。首先,让我们根据以下这段代码来研究一下它们的原型。在以下这段代码中,展示了两个普通字符串函数的定义:
PTSTR _tcscpy (PTSTR strDestination, PCTSTR strSource);errno_t _tcscpy_s (PTSTR strDestination, size_t numberOfCharacters, PCTSTR strSource);PTSTR _tcscat (PTSTR strDestination, PCTSTR strSource);errno_t _tcscat_s (PTSTR strDestination, size_t numberOfCharacters, PCTSTR strSource);
在将一个可写的缓冲区作为参数传递时,必须同时提供它的大小。这个值应该是一个字符数。通过对缓冲区使用_countof宏,我们很容易计算出这个值。
所有安全(后缀为_s)函数的首要任务是验证传给它们的参数值。要检查的项目包括指针不为NULL、整数在有效范围内、枚举值是有效的、而且缓冲区足以容纳结果数据。如果这些检查中的任何一项失败,函数都会设置局部于线程的C运行时变量errno。并返回一个errno_t值来指出成功或失败。然而,这些函数并不实际返回。相反,如果是一次调试版构建,它们会显示一个对用户不太友好的Debug Assertion Failed对话框。然后,终止应用程序进行。如果是发行版构建,则直接自动终止应用程序的运行。
在开发应用程序的时候应该使用Unicode字符和字符串。具体理由如下:
- Unicode有利于应用程序的本地化。
- 使用Unicode,只需发布一个二进制(.exe或DLL)文件,即可支持所有语言。
- Unicode提升了应用程序的效率,因为代码执行速度更快,占用内存更少。Windows内部的一切工作都是使用Unicode字符和Unicode字符串来进行的。所以,假如我们坚持传入ANSI字符或字符串,Windows就会被迫分配内存,并将ANSI字符或字符串转换为等价的Unicode形式。
- 使用Unicode,应用程序能轻松调用所有尚未弃用的Windows函数,因为一些Windows函数提供的版本只能处理Unicode字符和字符串
- Windows 核心编程学习笔记-第二章
- Windows核心编程第二章笔记
- Windows核心编程学习笔记----第二章 UNICODE
- WINDOWS核心编程--第二章UNICODE
- WINDOWS核心编程--第二章内核对象
- windows核心编程第二章--字符串
- windows核心编程 第二章学习
- windows核心编程-第二章 Unicode
- Windows核心编程学习笔记 第二部分 完成编程任务 第4章 进程
- Windows核心编程学习笔记 第二部分 完成编程任务 第5章 作业
- Windows核心编程学习笔记 第二部分 完成编程任务 第6章 线程的基本知识
- Python核心编程第二章笔记
- Windows核心编程(笔记13) 第十六章--第二十六章
- Windows核心编程笔记
- windows核心编程笔记
- Windows核心编程笔记
- windows核心编程笔记
- python核心编程第二版第二章学习笔记
- STL sort 函数实现详解
- 粒子群算法--背包问题
- Tesseract OCR 引擎-概述
- Android -----有序广播
- 【DPDK】虚拟机开发环境配置
- Windows核心编程第二章笔记
- Android开发数据存储基础整理
- LeetCode-72. Edit Distance
- Multimodal Memory Modelling for Video Captioning
- poj-2757-最长上升子序列-C语言-动态规划入门
- FZU 2203 单纵大法好 (思路)
- Storm(四):容错机制
- MySQL查看数据表
- 应用统计学与R语言实现学习笔记(八)——方差分析