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

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

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

Ø  为本文字符和字串使用泛型(比如TCHAR/PTSTR)。

Ø  为字节/字节指针和数据缓冲区使用显示数据类型(BYTEPBYTE)

Ø  Literal字符和字符串使用TEXT_T,但为了保持一致和更好的可读性,请避免两者混用。

Ø  执行全局替换。(例如,用PTSTR替换PSTR)。

Ø  修改字符串算术问题。例如,函数经常希望你传给它缓冲区的字符数,而不是字节数。这意味着你应该传入_countof(szBuffer),而不是sizeof(szBuffer)。而且,如果需要为一个字符串分配一个内存块,而且知道字符串中的字符数,那么记住内存是以字节来分配的。这意味着你必须调用malloc(nCharacters * sizeof(TCHAR)),而不是调用mallocnCharacters)。在前面列出的所有的基本准则中,这是最难记住的一条,而且如果出错,编译器不会提供任何警告或错误信息。所以,最好定义一个宏来避免犯错:

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

Ø  避免使用printf系的函数,尤其是不要用%s%S字段类型来进行ANSI与字符串的相互转换。正确的做法是使用MultiByteToWideCharWideCharToMultiByte函数。

Ø  UNICODE_UNICODE符号要么都指定,要么一个都不指定。

 

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

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

Ø  不要使用不安全的C运行库字符串处理函数。一般情况下,你使用或实现的任何缓冲区处理例程都必须获取目标缓冲区的长度作为一个参数。C运行库提供了一系列缓冲区处理替代函数,比如memcpy_s,memmove_s,wmemcoy_s,wmemmove_s。只要定义了__STDC_WANT_SECURE_LIB__符号,所有这些方法都是可用的;CrtDefs.h默认定义了此符号。所以,不要对__STDC_WANT_SECURE_LIB__进行undef

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

Ø  不要用Kernel32方法来进行字符串处理,比如lstrcatlstrcpy

Ø  在我们的代码中,需要要比较两种字符串。其中,编程类的字符串包括文件名、路径、XML元素/属性以及注册表项/值等等。对于这些字符串,应使用CompareStringOrdinal来进行比较。因为它非常快,而且不会考虑用户的区域设置。这是完全合理的,因为不管程序在世界上的什么地方运行,这种字符串都是不变的。用户字符串则一般要在用户界面上显示。对于这些字符串,应使用CompareStringEx)来比较,因为在比较字符串的时候,它会考虑用户的区域设置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值