[英]How does sprintf_s avoid buffer overflow issue
Visual Studio 提示我將sprintf
替換為sprintf_s
,而不是snprintf
。
sprintf_s
不需要長度參數,它如何避免緩沖區溢出問題?
有2個版本。 一種模板版本試圖推斷緩沖區的大小,另一種是傳遞大小。
int sprintf_s<_Size>(char (&_Dest)[_Size], const char *_Format, ...)
int sprintf_s(char * _DestBuf, size_t _SizeInBytes, const char *_Format, ...)
如果不能推導出第一個,則必須自己傳遞大小
所以這:
char buf[100];
sprintf_s(buf, "%d", 1);
將實例化一個函數模板
sprintf_s<100>();
這將產生一個編譯器錯誤:
char *buf = new char[100];
sprintf_s(buf, "%", 1);
你必須使用另一個版本來編譯它:
sprintf_s(buf, 100, "%d", 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.