0

VS2010。我正在将 sprintf stmts 转换为 sprintf_s。我注意到有两种实现,来自智能感知:

int sprintf_s<_Size>(char (&_Dest)[_Size], const char *_Format, ...)
int sprintf_s(char * _DestBuf, size_t _SizeInBytes, const char *_Format, ...)

那么编译器怎么会不接受:

void Test(char buf[])
{ 
   sprintf_s<10>(buf, "%s", "test");
}
4

2 回答 2

0

如果你想使用模板化版本,想法是编译器可以从你传递给 sprintf_s 的参数中推导出 _Size 模板参数,而不是你指定它。

所以基本上,你像这样使用它:

char dest[10];
sprintf_s(dest, "Format %s string", "blah");
于 2013-05-24T13:58:25.990 回答
0

文档显示您需要定义一两个宏来启用这些模板重载。我不认为这些是直接使用的,而是它们的目的是在编译时通过 C++ 模板而不是运行时检查来检查静态缓冲区的大小。

于 2013-05-24T13:59:16.583 回答