[英]How to pass a formatted string as a single argument in C?
我將如何 go 關於格式化字符串並將其作為 C 中的單個參數傳遞? 如果我想使用sprintf()
,我必須先創建一個變量,然后在傳遞變量之前將格式化的結果存儲在其中。 這感覺很亂。 有沒有辦法解決? 還是應該這樣做?
“凌亂”的部分可以被隔離成一個助手myFmtFunction
function,它構建字符串然后調用真正的myFunction
。 通過傳遞一個額外的 function 指針參數,格式化助手實際上可以用於不同的myFunction
目標(盡管下面的示例代碼沒有這樣做,以使其更簡單)。
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
void myFunction(const char *msg)
{ printf("[myFunction] %s: %d\n", msg, rand() % 6 + 1); }
void myFmtFunction(const char *fmt, ...)
{
// determine required buffer size
va_list args;
va_start(args, fmt);
int len = vsnprintf(NULL, 0, fmt, args);
va_end(args);
if(len < 0) return;
// format message
char msg[len + 1]; // or use heap allocation if implementation doesn't support VLAs
va_start(args, fmt);
vsnprintf(msg, len + 1, fmt, args);
va_end(args);
// call myFunction
myFunction(msg);
}
int main() {
const char s[] = "dice roll";
const int n = 3;
for(int i = 1; i <= n; i++)
myFmtFunction("%s %d of %d", s, i, n);
return 0;
}
可能的 output :
[myFunction] dice roll 1 of 3: 2
[myFunction] dice roll 2 of 3: 5
[myFunction] dice roll 3 of 3: 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.