《Windows核心编程5》第二章-字符和字符串处理

1、判断一个文件的数据是否为Unicode,需要先从文件读取数据,然后调用函数IsTextUnicode函数去判断。

2、针对api的参数中长度类型参数如果是以cb开头的,需要通过sizeof *len来计算需要的字节数,如果是cch开头的一般调用_countof来计算字符数。

3、到处ASNI和UNICODE函数接口,可以先实现Unicode类型接口,ASNI接口可以通过Unicode接口和WideCharToMultiByte函数实现。

4、比较用户界面的字符串推荐调用函数CompareString(Ex), 内部数据如注册表、文件名、文件路径或者xml元素/属性等类型的字符串数据采用CompareStringOrdinal函数来比较。

5、始终采用安全的字符串处理函数,比如使用后缀为_s的函数,或者前缀为StringCch的函数,采用/GS和/RTCs编译器标识来自动检测缓冲区溢出。

6、字符串类型一律采用TCHAR类型,推荐使用Unicode的字符和字符串。

7、所有安全(后缀为_s)的函数,首要任务是验证传给它们的参数值。要检查的项目包括指针不为NULL,整数在有效范围内,枚举值是有效的,而且缓冲区足以容纳结果数据,如果这些检查中的任何一项失败,函数都会设置局部于线程的c运行时变量errno,并返回一个errno_t值来指出成功或者失败。然而,如何程序采用调试版本构建,会显示一个Debug Assertion Failed对话框,然后终止应用程序运行,如果是发行版本,则直接自动终止应用程序的运行。

8、如果想取消Debug Assertion Failed对话框,自己可以定义一个调试器函数,类型如下:

void InvalidParameterHandler(PCTSTR expression, PCTSTR function, PCTSTR file, unsigned int line, uintptr_t /* pReserved*/);

其中function、file、line 分别描述了出现错误的函数名称、源码文件和源码行号;

下一步调用_set_invalid_parameter_handler来注册这个函数,另外需要在应用程序开头地方调用_CrtSetReportMode(_CRT_ASSERT, 0);从而禁止可能由C运行时触发的所有Debug Assertion Failed对话框。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值