我正在编写一个函数,它接受一个可变参数列表并从中生成一个格式化的字符串。问题是,我使用sprintf创建字符串,我需要明确列出所有参数,同时编程
sprintf(string, format, a0, a1, a2, ...);
在cppreference然而,sprintf的描述说明了......
...(其他参数) 根据格式字符串,函数可能需要一系列附加参数,每个参数都包含要用于替换的值 格式字符串中的格式说明符(或指向存储的指针 位置,对于n )。
我理解的是,我可以将所有数据存储到指针位置并将指针传递给sprintf。
int arr[X];
arr[0] = a0;
...
sprintf(string, format, &arr);
尝试这会导致意外行为。只有数字被写入字符串。
它是否真的以这种方式工作,是否有更好的解决方案?
我的第一次尝试是将每个variadic参数分别添加到字符串中,但是这会产生很多对sprintf的调用,这是我想要避免的。
是否可以将可变参数列表从一个函数传递到另一个函数?
答案 0 :(得分:1)
好的......为什么我早点找不到...
我的解决方案是使用vsnprintf
代替sprintf
。这样就可以将va_list传递给格式化的字符串函数,并且它是安全的。