zoukankan      html  css  js  c++  java
  • 安全字符串处理函数

    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 为单位.

  • 相关阅读:
    sql获取当天零点
    byte[]和InputStream的相互转换
    ResultSet获取记录条数
    Java:String和Date、Timestamp之间的转换
    查询表中blob字段的大小
    Oracle中start with...connect by子句的用法
    oracle创建序列,并插入记录
    关于使用JSONArray.fromObject()方法和引入net.sf.json包所需要的jar包支持
    css来控制img正方形自适应
    上下固定中间自适应
  • 原文地址:https://www.cnblogs.com/qinfengxiaoyue/p/3414558.html
Copyright © 2011-2022 走看看