我对vsprintf
的问题是我无法直接获取输入参数,我必须先逐个获取输入并将其保存在void**
中,然后将此void**
传递给{ {1}},对于windows来说一切都很好,但是当我来到64位linux时,gcc无法编译,因为它不允许从vsprintf()
转换为void**
,有没有人可以给我一些帮我在linux下怎么做?
我的部分代码是:
va_list
非常感谢!!
答案 0 :(得分:1)
问题是,您的函数获得...
,但您传递的是va_list
。 ...
用于这样的用法:
getInputArgs(s, formatString, arg1, arg2, arg3, arg4 /* etc */);
,它不适用于va_list
。不幸的是,没有一种简单的方法可以从不同的参数创建va_list
,而不是从...
获取它。例如,请参阅this question。
你应该做的是改变你想要打印到字符串的方式。
你可以:
char s[256];
int so_far = 0;
在你的for循环中,而不是像这样的东西:
CopyInDoubleArg(i, TRUE, &tempValue); //lib func
args_ptr[i-2] = (void*) (int)tempValue;
你写道:
CopyInDoubleArg(i, TRUE, &tempValue); //lib func
if (so_far < 256) /* 256 is the maximum length of s */
so_far += snprintf(s + so_far, 256 - so_far, "%lf", tempValue);
这些方面的东西。这样,您可以逐个创建字符串,将每个元素追加到上一个元素,而不是尝试一次完成所有元素。