【发布时间】:2020-11-22 19:39:49
【问题描述】:
我正在尝试使用 va_list 及其关联的宏与 vsprintf() 来创建具有可变数量的说明符的格式字符串。这是我编写的示例程序,其中说明符的数量只能通过 NUM_ARG 宏来更改:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#define MAXBUF 4096
#define SPECIFIER "(%s)"
#define NUM_ARG 5
char *strmaker(int num_args, ...)
{
char form[MAXBUF] = { [0] = '\0' };
char *prnt = (char *) malloc(sizeof(char) * MAXBUF);
va_list strings;
for (int i = 0; i < num_args; ++i)
strcat(form, SPECIFIER);
va_start(strings, num_args);
vsprintf(prnt, form, strings);
va_end(strings);
return prnt;
}
int main(int argc, char *argv[])
{
if (argc != (NUM_ARG + 1))
return -1;
char *s = strmaker(NUM_ARG, argv[1], argv[2], argv[3], argv[4], argv[5]);
printf("%s\n", s);
free(s);
return 0;
}
但是,这并不是我想要实现的。我怎么能用可变数量的参数来做到这一点?如何将可变数量的字符串传递给函数并用于初始化 va_list?
【问题讨论】:
标签: c formatting printf variadic-functions