人们说用vprintf
代替printf
。但我不能,因为我需要使用自己的函数。
我有两个自定义函数
两者都使用虚拟列表
一个函数使用另一个函数
所以有没有可能把va_list
呼叫连起来而不需要那些v。。。功能?怎么做?
代码:
char* createString(const char* line, ...)
{
char* result = (char*)malloc(100);
va_list args;
va_start(args, line);
vsprintf(result, line, args);
va_end(args);
return result;
}
void show(const char* line, ...)
{
va_list args;
va_start(args, line);
char* a = createString(line, args);
va_end(args);
AfxMessageBox(a);
free(a);
}
// usage:
show("test %i, %i", 12, 123);
当我尝试这个时,我得到了错误的字符串显示。而不是12和123我得到一些指针或东西。
可悲的解决方案:
char* vCreateString(const char* line, va_list args)
{
char* result = (char*)malloc(100);
vsprintf(result, line, args);
return result;
}
最佳答案
不,不可能。这就是为什么v
版本首先存在,以支持在va_list
上传递的原因。
您需要使createString()
接受va_list
参数。
另外,please don't cast the return value of malloc()
in C,并考虑使用vsnprintf()
来防止缓冲区溢出。
关于c - 如何将变量参数列表传递给另一个类似于printf的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23754556/