c - 重用 va_list

标签 c visual-studio-2005 printf

我需要对 va_list 进行两次(或多次)传递。我有一个一定大小的缓冲区,我想用 sprintf 向其中写入一个格式化的字符串。如果格式化的字符串不适合分配的空间,我想将分配的空间加倍并重复直到它适合。

(作为旁注,我希望能够首先计算格式化字符串的长度并分配足够的空间,但我发现唯一可以做到这一点的函数是 _snprintf,它在 VS2005 中已被弃用。 ..)

现在,到目前为止没有问题:我使用 vsnprintf 并在每次调用之前调用 va_start

但我还创建了一个函数,它采用 va_list 作为参数,而不是“...”。那我就不能再使用 va_start 了!我读过有关 va_copy 的内容,但它在 VS2005 中不受支持。

那么,你会怎么做呢?

最佳答案

A previous question关于 MSVC 中缺少 va_copy 有一些足够不错的建议,包括实现您自己的 va_copy 版本以供在 MSVC 中使用:

#define va_copy(d,s) ((d) = (s))

您可能希望将其放入受 #ifndef va_copy#ifdef _MSC_VER 保护的“可移植性” header 中,以便在 VC 上使用。

关于c - 重用 va_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288680/

相关文章:

c - 使用 printf() 在 C 中打印 shell 命令行

c - 如何在 linux 中对齐 kmalloc() 地址

visual-studio-2005 - 调试窗口服务

c++ - 为什么指针声明中需要数据类型?

c++ - 如果我不使用 to_string 或 from_string,为什么我需要在 boost 中编译 DateTime?

javascript - 如何在 asp 下拉菜单查询中使用 JavaScript 和 vb.net 变量

java - 无需额外命令即可删除尾随零

c++ - sprintf 比 print 占用更多空间?

c++ - 下面程序的复杂度是多少?

C图形库错误