如何将变量参数列表传递给另一个类似函数的printf?

时间:2014-05-20 08:23:30

标签: c parameters printf

人们说使用vprintf代替printf。但我不能因为我需要使用自己的功能。

  • 我有2个自定义功能
  • 都使用va_list
  • 一个函数使用另一个函数

那么可以在没有这些v ...函数的情况下链接va_list个调用吗?如何 ?

<小时/> 的代码:

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;
}

1 个答案:

答案 0 :(得分:2)

不,这是不可能的。这就是v - 版本首先存在的原因,以支持传递va_list

您需要createString()接受va_list参数。

此外,please don't cast the return value of malloc() in C,并考虑使用vsnprintf()来防止缓冲区溢出。