簡體   English   中英

sprintf_s 如何避免緩沖區溢出問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM