[英]sprintf_s template base overload not working
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");
}
如果要使用模板版本,則想法是編譯器可以從傳遞給sprintf_s的參數中推斷出_Size模板參數,而不是指定它。
因此,基本上,您可以這樣使用它:
char dest[10];
sprintf_s(dest, "Format %s string", "blah");
該文檔顯示您需要定義一個或兩個宏才能啟用這些模板重載。 我認為這些不是直接使用的,而是用於在編譯時通過C ++模板而不是運行時檢查來檢查靜態緩沖區大小的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.