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通用定義,spa
原型:int snprintf(char *str, size_t size, const char *format, ...)orm
功能:將可變個參數(...)按照format格式化成字符串,而後將其複製到str中字符串
(1) 若是格式化後的字符串長度 < size,則將此字符串所有複製到str中,並給其後添加一個字符串結束符('\0');
(2) 若是格式化後的字符串長度 >= size,則只將其中的(size-1)個字符複製到str中,並給其後添加一個字符串結束符('\0'),返回值爲欲寫入的字符串長度。
返回值:若成功則返回欲寫入的字符串長度,若出錯則返回負值。原型
說明:strcpy() sprintf() strcat() 存在安全隱患, 其對應的安全版爲:strncpy() snprintf() strncat()
form
snprintf_s()函數的n表明最多複製多少個字符,函數名尾部_s表示檢測緩衝區溢出,微軟特有的檢測。im
正確用法以下:nw
char szTable[27] = "abcdefghijklmnopqrstuvwxyz";
char szBuffer[10] = { 0 };
//將會崩潰,由於會發生緩衝區溢出
//_snprintf_s(szBuffer, sizeof(szBuffer), "%s", szTable);
//正確用法
_snprintf_s(szBuffer, sizeof(szBuffer) - 1, "%s", szTable);
---------------------
runtime