安全字符串处理函数

0.计数类

_tcslen:决不能对已分配字符串空间而未初始化的字符串指针使用_tcslen。如:

TCHAR *psz = new TCHAR[10];

assert(_tcslen(psz) == 10);//错误!结果未知!

sizeof:对指针和数组的sizeof结果是不同的.

比如 char sz[]=”hello”;则sizeof(sz) == 6;

而char *psz = new char[100];则sizeof(psz) == 4,也就是一个指针的大小.

但是当数组作为参数传递时,将退化为同类型的指针:

void Func(char sz[100])

{

assert(sizeof(sz)==4);

}

_countof:这是一个计数字符的宏.只适用于静态分配的数组(statically-allocated array).如果作用于指针,C 将会产生错误结果;C++ 将不能通过编译.

1. 复制、连接类

_tcsncpy_s:

第一个参数:TCHAR *strDest, 目标缓存地址. 第二个参数:size_t numberOfElements,目标缓存所能容纳的字符数.对于char类型缓存,它容纳的字符数等同于它的字节数,即:sizeof(buf) == _countof(buf).对于wchar_t类型的缓存,此处应使用_countof进行计数.因为此时sizeof(buf) == 2*_countof(buf). 第三个参数:const char *strSource,源字符串地址 第四个参数:size_t count, 准备从源字符串复制多少个字符到目标缓存.必须保证目标缓存剩余一个字符空间来容纳null,否则此函数调用失败.当此参数为_TRUNCATE时,将复制尽可能多的字符到目标缓存,同时保留一个字符给null.若截断,返回值为 STRUNCATE .参考:

http://msdn.microsoft.com/en-us/library/ms175769.aspx

_tcsncat_s:

2.格式化类

_sntprintf_s:对目标缓存计数以 bytes(对char) 和 words(对wchar_T)为单位.统一用 _countof 计数最好.

_vsntprintf_s:使用va_list动态格式化字符串的类.

3.字符串转换类

wcstombs_s:我草2码B。注意此函数对目标缓存的计数以 bytes 为单位.

mbstowcs_s:码B2我草。此函数对目标缓存的计数以 words 为单位.

原文地址:https://www.cnblogs.com/qinfengxiaoyue/p/3414558.html