我正在嘗試為具有類似 printf 行為的日志函式撰寫包裝器。
誰能告訴我為什么下面的例子不起作用?
#include <stdarg.h>
void message(int level, const char* format, ...)
{
if(level > 3)
return;
static char msgBuff[1024] = {0};
va_list argptr;
va_start(argptr, format);
snprintf(msgBuff, sizeof(msgBuff), format, argptr);
va_end(argptr);
printf("%s", msgBuff); // Dummy Call
}
int main()
{
int a = 42;
message(3, "This is a test: %s %i", "The answer is ", a);
return 0;
}
輸出:
This is a test: 0
uj5u.com熱心網友回復:
格式字串之后的引數snprintf必須是根據格式字串中的轉換說明符預期的各個引數。argptr不是這樣的論點,所以呼叫是不正確的。
要使用va_list, 呼叫vsnprintf而不是. 列印變數引數snprintf。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/410357.html
標籤:
上一篇:c中的字串不需要的字符
下一篇:運行兩個連續應用腳本的順序
