[英]Variable arguments without first argument - what belongs in va_start?
[英]In C, how to pass a variable number of arguments (say, 50+) to a function which va_start() understands prior to calling vsnprintf()?
問題
有沒有辦法使用某種數組將許多 arguments 傳遞給下面的 MyPrint() ,其中包含指向 va_start() 在調用vsnprintf()之前理解的字符串的指針列表?
格式字符串說明符的示例。 最好創建一個包含相應值的數組並將其傳遞給 MyPrint() 而不是單獨傳遞每個參數。 我不知道 va_start() 是否有可能理解它。 :(
"[0x%llX][%u] %s --- A=%llu (0x%llX) B=%llu (0x%llX) C=%llu (0x%llX) X=%llu (0x%llX) Y=%llu (0x%llX) Z=%llu (0x%llX)"
細節
MyPrint() 調用vsnprintf()將 arguments 的格式化列表打印到字符數組。 vsnprintf() 的聲明如下所示:
int vsnprintf(char *arr, size_t len, const wchar_t *format, va_list args);
參數
#include <stdio.h>
#include <stdarg.h>
int MyPrint(char* buffer, int bufferSize, const char *format, ...)
{
int len = 0;
va_list arguments;
va_start(arguments, format);
len = vsnprintf(buffer, bufferSize, format, arguments);
va_end(arguments);
return len;
}
int main()
{
char buffer[256];
MyPrint(buffer, 256, "%s %s","Hello","World");
printf("%s",buffer);
return 0;
}
有沒有辦法使用某種數組將許多 arguments 傳遞給下面的 MyPrint() ,其中包含指向 va_start() 在調用
vsnprintf()
之前理解的字符串的指針列表?
初始化va_list
的唯一定義方法,例如vsnprintf()
需要作為參數,是
通過va_start()
宏,在可變參數 function 的上下文中運行,從函數的可變參數 arguments 形成一個va_list
,以及
通過va_copy()
宏,復制另一個va_list
。
標准 C 中沒有從數組元素形成va_list
的機制,除非將它們全部單獨傳遞給可變參數 function。
可變參數函數是關於編碼靈活性,而不是數據靈活性。 如果你想要一個 function 來處理 arrays 的數據,那么寫一個(非可變的)一個來處理數據。
每當您考慮編寫自己的可變參數 function 時,敲擊自己的腦袋並重復這句咒語:“可變參數不是答案”。 只有在經過幾次迭代后您的腦海中仍然存在可變參數時,您才應該考慮實際研究該選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.