簡體   English   中英

在 C 中,如何將變量 arguments(比如 50+)傳遞給 function,va_start() 在調用 vsnprintf() 之前理解它?

[英]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);

參數

  • arr:指向要打印output的字符數組的指針
  • len:可以寫入數組的最大字符數
  • format:打印 output 的格式
  • args:指向要打印的 arguments 列表的指針

演示

#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.

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