題
有沒有辦法使用某種陣列將許多引數傳遞給下面的 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()將格式化的引數串列列印到字符陣列。vsnprintf() 的宣告如下所示:
int vsnprintf(char *arr, size_t len, const wchar_t *format, va_list args);
引數
- arr:指向要列印輸出的字符陣列的指標
- len:可寫入陣列的最大字符數
- 格式:列印輸出的格式
- 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;
}
uj5u.com熱心網友回復:
有沒有辦法使用某種陣列將許多引數傳遞給下面的 MyPrint(),該陣列包含指向 va_start() 在呼叫之前理解的字串的指標串列
vsnprintf()?
初始化 a 的唯一定義方法va_list,例如vsnprintf()requires 作為引數,是
通過
va_start()宏,在可變引數函式的背景關系中操作以va_list從函式的可變引數形成 a,以及通過
va_copy()宏,復制另一個va_list.
標準 C 中沒有va_list從陣列元素形成 a 的機制,除非將它們全部單獨傳遞給可變引數函式。
可變引數函式是關于編碼靈活性,而不是資料靈活性。如果您想要一個處理資料陣列的函式,請撰寫一個(非可變引數)來執行此操作。
每當您考慮撰寫自己的 varargs 函式時,請敲自己的腦袋并重復口頭禪:“varargs 不是答案”。只有在經過幾次迭代之后您的腦海中仍然存在可變引數時,您才應該考慮實際研究該選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448215.html
上一篇:正在修改陣列
