_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中,並給其后添加一個字符串結束符('\0');
(2) 如果格式化后的字符串長度 >= size,則只將其中的(size-1)個字符復制到str中,並給其后添加一個字符串結束符('\0'),返回值為欲寫入的字符串長度。
返回值:若成功則返回欲寫入的字符串長度,若出錯則返回負值。

說明: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);
---------------------

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM