【发布时间】:2021-09-19 14:23:01
【问题描述】:
Visual Studio 提示我将 sprintf 替换为 sprintf_s,而不是 snprintf。
sprintf_s不需要长度参数,如何避免缓冲区溢出问题?
【问题讨论】:
-
有模板版本可以从
buffer参数中推断出大小。如果失败,您需要提供尺寸。 docs.microsoft.com/en-us/cpp/c-runtime-library/reference/… 这有一个例子来展示它什么时候会推断出大小,什么时候不会。 docs.microsoft.com/en-us/cpp/c-runtime-library/… -
如果你使用的是 C11 中引入的
sprintf_s(),第二个参数是字符串缓冲区的大小。 Microsoft 还在 C++ 中指定了一个非标准模板化版本,它接受char数组作为第一个参数,其中大小是模板参数。后者不能传递char *(因为无法推断大小)。
标签: c++ windows visual-studio