各字符串长度函数的区别和比较
2016-06-23 15:51
621 查看
编程过程中,我们需要用到函数用来处理我们的字符串长度。但是,随着计算机位数的不断扩展,之前的很多函数对于计算字符串长度的功能也已经适用范围有限。所以,出现了很多的新的函数用来应对不同使用环境下的字符串处理。现在,我们把几个常见的并且容易混淆的字符串长度处理函数进行区分和甄别。
先说最常见的函数,strlen函数,主要功能是用作计算字符串的长度,不包含\0。但是strlen会将字符串当做char类型来处理计算,而我们有的字符串类型为w_char,则该函数不适用。
为了应对w_char这种类型的字符,所以,产生了wcslen这个函数,功能与strlen完全一样,只是处理的字符类型为w_char。
strnlen函数,功能也是计算字符串中的字符个数,虽然功能上于strlen很类似,但是该函数的设计初衷是用于计算一些输入性大小未知的数据源,例如网络接收到的数据包。如果该字符串超过预定的大小,则该函数仍然返回预定的长度值,而非真实的字符串长度值。同事,该函数会将所有的字符串当single_byte的方式计算,如果含有w_char,则该函数的计算结果就会有误。strnlen_s和strnlen的功能差不多,不过是多了一个安全检查。
wcsnlen和wcsnlen_s则是这个函数对应的w_char版本。同理,其他的字符串处理函数,如果以w开头的话,一般也都是用来处理w_char版本。
而一般带有_m开头的,则是这些函数的mbcs编码版本,例如_mbslen,_mbslen_l等等,都是这些函数对应于mbcs编码版本所做的对应接口。mbcs编码是指什么呢?值得就是扩展之后的ASCII编码,muilti-bytes charecter set。
需要特殊说明的一点,在msdn中也进行了强调,有很多的CRT函数在windows平台中已经不支持了,所谓的CRT函数就是指C RunTime函数,这些函数由于较为过时,有些能够支持,有些已经不支持了。例如_mbslen,_mbslen_l在windows的平台的应用中,就已经被禁止使用了。
当然,这种规则不仅仅在字符串长度计算中使用,在其他的字符处理函数中也通用。
先说最常见的函数,strlen函数,主要功能是用作计算字符串的长度,不包含\0。但是strlen会将字符串当做char类型来处理计算,而我们有的字符串类型为w_char,则该函数不适用。
为了应对w_char这种类型的字符,所以,产生了wcslen这个函数,功能与strlen完全一样,只是处理的字符类型为w_char。
strnlen函数,功能也是计算字符串中的字符个数,虽然功能上于strlen很类似,但是该函数的设计初衷是用于计算一些输入性大小未知的数据源,例如网络接收到的数据包。如果该字符串超过预定的大小,则该函数仍然返回预定的长度值,而非真实的字符串长度值。同事,该函数会将所有的字符串当single_byte的方式计算,如果含有w_char,则该函数的计算结果就会有误。strnlen_s和strnlen的功能差不多,不过是多了一个安全检查。
wcsnlen和wcsnlen_s则是这个函数对应的w_char版本。同理,其他的字符串处理函数,如果以w开头的话,一般也都是用来处理w_char版本。
而一般带有_m开头的,则是这些函数的mbcs编码版本,例如_mbslen,_mbslen_l等等,都是这些函数对应于mbcs编码版本所做的对应接口。mbcs编码是指什么呢?值得就是扩展之后的ASCII编码,muilti-bytes charecter set。
需要特殊说明的一点,在msdn中也进行了强调,有很多的CRT函数在windows平台中已经不支持了,所谓的CRT函数就是指C RunTime函数,这些函数由于较为过时,有些能够支持,有些已经不支持了。例如_mbslen,_mbslen_l在windows的平台的应用中,就已经被禁止使用了。
当然,这种规则不仅仅在字符串长度计算中使用,在其他的字符处理函数中也通用。
相关文章推荐
- 查找--插值查找
- Android toolbar 左边距问题
- iOS开发企业版ipa分发(In-House模式)记录
- 寻找最好用的WINPE,我心如水改造升级版
- 【codevs 1231】 最优布线问题
- iOS之NSJSONReadingOptions的三个选项
- innodb缓冲池
- 并发登录人数控制--Shiro系列(二)
- c# ActiveX 手动申请,释放资源
- 我的第三方登陆代码和分享代码部分
- iOS:判断引导页首次出现、版本更新
- SQL 2014 AlwaysOn 搭建
- esxi error 1962
- HTML <hr> 标签
- Java中获取当前运行代码的类名、方法名、行号
- android studio导入本地aar包
- termios结构体说明
- 《notification》WEB开发桌面通知
- 【转】SpringMVC注解说明
- Linphone探索:6 . Linphone用户注册