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);
    ---------------------

  • 相关阅读:
    【BZOJ1087】状压dp
    【数据库课程设计】
    【BZOJ1295】最短路
    vue组件间通信六种方式(完整版)
    常见六大Web安全攻防解析
    4、css之position
    hue集成各种组件
    1.25-1.26 Coordinator数据集和oozie bundle
    1.22-1.24 Oozie企业使用案例
    1.18-1.21 Oozie Coordinator调度
  • 原文地址:https://www.cnblogs.com/youxin/p/10584132.html
Copyright © 2011-2022 走看看