_sntprintf_s 和 _sntprintf 区别

Posted youxin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了_sntprintf_s 和 _sntprintf 区别相关的知识,希望对你有一定的参考价值。

 

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

 

以上是关于_sntprintf_s 和 _sntprintf 区别的主要内容,如果未能解决你的问题,请参考以下文章

\_\_setitem\_\_和\_\_getitem和\_\_delitem__

描述符(\_\_get\_\_和\_\_set\_\_和\_\_delete\_\_)

__setattr__和__delattr__和__getattr__

Python-__init__ 和 __new__区别和原理

Python面向对象高级

jquery中用于控制元素显示和隐藏效果的分别是______和______方法。