簡體   English   中英

sprintf_s模板基本重載不起作用

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

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