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