c++ - 对 sprintf 可变参数使用一个指针

标签 c++ printf

我正在编写一个函数,它接受一个可变参数列表并从中生成一个格式化的字符串。问题是,我使用 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 传递给格式化的字符串函数并且它是安全的。

How to pass variable number of arguments to printf/sprintf

关于c++ - 对 sprintf 可变参数使用一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42850999/

相关文章:

c - 如何删除printf语句中的空格

c - C 中的 %i、%d 和 %D 有什么区别? (打印)

c - 如何使用 GDB(或其他程序)获得堆栈的总体概述?

c++ - libgit2 : SSH : Unable to exchange encryption keys

c++ - 有没有类似 VisualAssistX for Eclipse 的东西?或者我想用我的 Eclipse 自动补全

java - 计算 n 个元素上所有可能根的高度为 h 的二叉搜索树的数量

C - Scanf 和 Printf 执行乱序,我不确定为什么

c++11 standard-layout - 使用相同的访问控制

c++ - 将两个复杂属性重组为新对象

c - %a 转换如何在 printf 语句中工作?