笔记:C/C++字符函数的使用

  以字符拷贝函数为例:

  分为TCHAR版 MCBS 和UNICODE版

TCHAR MCBS UNICODE  VC推荐安全版
_tcscpy     strcpy   wcscpy *_s 
_tcsncpy strncpy wcsncpy *_s 

  

    

 

  

  从src拷贝字符到des,于是就产生了2个问题:

  它们2个串的长度和相互匹配问题。

  原来的strcpy是复制src中的字符到des,包括空值结束符,但是怕des太小,容不下,容易崩溃,所以有了后来的strncpy,指定了拷贝的长度,但终归目的是要求des长度要合适。即便如此,事情往往并没有像预料那般前进,不可避免会有des长度不合适,导致程序运行时崩溃。所以有了_s版,有错的话,会弾出错误信息来纠正,而不是直接崩溃,这样就好多了。而且在des长度足够时,使用strncpy_s比strncpy要好,_s版会自动把拷贝后des剩余部分清零,strncpy不会这样做,你得手动清零,不然有可能des值是str+乱码。不过_s版不是标准库里的函数,各有取舍。

  这里主要记录下VC推荐安全版的区别,因为VC的编译器推荐使用它们的_s版。

  有不多参数的,也有加参数的。

  前者不加参数时(&des)[size]类型,只能用于静态分配内存的指针,

  后者多了一个参数在*des后面,des可以是动态分配内存的指针,

  目的是保证缓冲区的大小。

  而实际操作中会碰到各种情况。只需要明白它们之间的区别,合理使用。

posted on 2014-02-23 17:28  从头开始游戏编程  阅读(469)  评论(0编辑  收藏  举报