首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用可变长度参数包装函数?

如何用可变长度参数包装函数?
EN

Stack Overflow用户
提问于 2008-09-03 10:12:27
回答 7查看 31.7K关注 0票数 50

我希望在C/C++中实现这一点。我遇到了可变长度参数,但这表明了使用利布菲和C的解决方案。

现在,如果我想用myprintf包装printf函数。

我这样做如下:

代码语言:javascript
复制
void myprintf(char* fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    printf(fmt, args);
    va_end(args);
}

int _tmain(int argc, _TCHAR* argv[])
{
    int a = 9;
    int b = 10;
    char v = 'C';
    myprintf("This is a number: %d and \nthis is a character: %c and \n another number: %d\n", a, v, b);
    return 0;
}

但结果并不像预期的那样!

代码语言:javascript
复制
This is a number: 1244780 and
this is a character: h and
another number: 29953463

我错过了什么?

EN

Stack Overflow用户

发布于 2012-04-30 07:55:53

代码语言:javascript
复制
void myprintf(char* fmt, ...)
{
    va_ list args;
    va_ start(args, fmt);
    printf(fmt, args); // This is the fault. "vprintf(fmt, args);"
                       // should have been used.
    va_ end(args);
}

如果您只是试图调用printf,有一个名为vprintf的printf变量,它直接接受va_list : vprintf(fmt,args);

票数 0
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档