簡體   English   中英

如何在 C 中將格式化字符串作為單個參數傳遞?

[英]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.

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