zoukankan      html  css  js  c++  java
  • _sntprintf_s 和 _sntprintf 区别 sntprinf内存溢出

    https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/snprintf-s-snprintf-s-l-snwprintf-s-snwprintf-s-l?view=vs-2017

    int _snprintf_s( char *buffer, size_t sizeOfBuffer, size_t count, const char *format [, argument] ... );

    _sntprintf是snprintf的ANSI和UNICODE通用定义,

    原型:int snprintf(char *str, size_t size, const char *format, ...)

    功能:将可变个参数(...)按照format格式化成字符串,然后将其复制到str中

    (1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('');
    (2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符(''),返回值为欲写入的字符串长度。
    返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。

    说明:strcpy() sprintf() strcat() 存在安全隐患, 其对应的安全版为:strncpy() snprintf() strncat()

    snprintf_s()函数的n代表最多复制多少个字符,函数名尾部_s表示检测缓冲区溢出,微软特有的检测。

    正确用法如下:


    char szTable[27] = "abcdefghijklmnopqrstuvwxyz";
    char szBuffer[10] = { 0 };
    //将会崩溃,因为会发生缓冲区溢出
    //_snprintf_s(szBuffer, sizeof(szBuffer), "%s", szTable);
    //正确用法
    _snprintf_s(szBuffer, sizeof(szBuffer) - 1, "%s", szTable);
    ---------------------

  • 相关阅读:
    通过代码去执行testNG用例
    启动jenkins服务错误
    linux 添加用户到sudo中
    通过jenkins API去build一个job
    iptables
    比较git commit 两个版本之间次数
    linux awk命令详解
    cron和crontab
    工作随笔——CentOS6.4支持rz sz操作
    Jenkins进阶系列之——15Maven获取Jenkins的Subversion的版本号
  • 原文地址:https://www.cnblogs.com/youxin/p/10584132.html
Copyright © 2011-2022 走看看