我正在编写一个函数,它接受一个可变参数列表并从中生成一个格式化的字符串。问题是,我使用 sprintf 创建字符串,我需要在编程时明确列出所有参数
sprintf(string, format, a0, a1, a2, ...);
关于 cppreference然而 sprintf 的描述说,那......
... (additional arguments) Depending on the format string, the function may expect a sequence of additional arguments, each containing a value to be used to replace a format specifier in the format string (or a pointer to a storage location, for n).
我的理解是,我可以将所有数据存储到一个指针位置并将指针交给 sprintf。
int arr[X];
arr[0] = a0;
...
sprintf(string, format, &arr);
尝试导致意外行为。只有数字被写入字符串。
它实际上是这样工作的吗?是否有更好的解决方案?
我的第一次尝试是将每个可变参数分别添加到字符串中,但这会产生对 sprintf 的大量调用,这是我想避免的。
是否可以将可变参数列表从一个函数传递到另一个函数?
最佳答案
好吧……我为什么不早点发现这个……
我的解决方案是使用 vsnprintf
而不是 sprintf
。这样就可以将 va_list 传递给格式化的字符串函数并且它是安全的。
关于c++ - 对 sprintf 可变参数使用一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42850999/