sprintf_s模板基础重载不起作用

时间:2013-05-24 13:52:59

标签: c++ templates std

VS2010。我正在将sprintf stmts转换为sprintf_s。我注意到有两个实现,来自intellisense:

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

2 个答案:

答案 0 :(得分:0)

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

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

char dest[10];
sprintf_s(dest, "Format %s string", "blah");

答案 1 :(得分:0)

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