c – 重用va_list
发布时间:2020-12-16 05:44:07 所属栏目:百科 来源:网络整理
导读:我需要通过va_list进行两次(或更多次)传递.我有一个大小的缓冲区,我想用sprintf写一个格式化的字符串.如果格式化的字符串不适合分配的空间,我想要将分配的空间加倍并重复直到它适合. (作为旁注,我希望能够首先计算格式化字符串的长度并分配足够的空间,但我发
我需要通过va_list进行两次(或更多次)传递.我有一个大小的缓冲区,我想用sprintf写一个格式化的字符串.如果格式化的字符串不适合分配的空间,我想要将分配的空间加倍并重复直到它适合.
(作为旁注,我希望能够首先计算格式化字符串的长度并分配足够的空间,但我发现可以做到的唯一功能是_snprintf,并且在VS2005中不推荐使用…) 现在,到目前为止没有问题:我使用vsnprintf并在每次调用之前调用va_start. 但我还创建了一个函数,它将va_list作为参数,而不是“…”.然后我再也不能使用va_start了!我读过有关va_copy的内容,但VS2005不支持. 那么,你会怎么做? 解决方法
我看到没有可移植的方式(我认为va_copy已经在C99中引入,因为没有可移植的方法来实现其在c89中的结果). va_list可以是声明为的模拟引用类型
typedef struct __va_list va_list[1]; (请参阅gmp了解该技巧的另一个用户)并解释了围绕它们的许多语言限制.顺便说一下,如果可移植性很重要,请不要忘记va_end. 如果可移植性不重要,我会检查stdard.h,看看我是否可以考虑真正的声明来破解. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |