【问题标题】:How to pass variable argument list to another printf like function?如何将变量参数列表传递给另一个类似 printf 的函数?
【发布时间】:2014-05-20 08:23:30
【问题描述】:

人们说使用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;
}

【问题讨论】:

    标签: c parameters printf


    【解决方案1】:

    不,这是不可能的。这就是为什么首先存在v-versions 以支持传递va_list

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2014-04-02
      • 2011-04-01
      相关资源
      最近更新 更多