各字符串长度函数的区别和比较

            编程过程中,我们需要用到函数用来处理我们的字符串长度。但是,随着计算机位数的不断扩展,之前的很多函数对于计算字符串长度的功能也已经适用范围有限。所以,出现了很多的新的函数用来应对不同使用环境下的字符串处理。现在,我们把几个常见的并且容易混淆的字符串长度处理函数进行区分和甄别。

        先说最常见的函数,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的平台的应用中,就已经被禁止使用了。

    当然,这种规则不仅仅在字符串长度计算中使用,在其他的字符处理函数中也通用。

猜你喜欢

转载自blog.csdn.net/helinlin007/article/details/51743157