首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >变量函数未正确传递第一个参数

变量函数未正确传递第一个参数
EN

Stack Overflow用户
提问于 2019-04-12 08:25:31
回答 1查看 178关注 0票数 1

我使用了可变函数来包装printf (或vprintf)。

下面的代码可以正常工作,除了在warning_printf的第一个变量参数上出错。此外,直接放置字符串将更改ASCII字符,但不会修复它,因为消息仍然是随机的。

它打印的内容是

代码语言:javascript
复制
[Warning]
          ®¯$ address: 0x87afae8a

而不是

代码语言:javascript
复制
[Warning] Failed to initialize setting address: 0x87afae8a

Warning一词的颜色正确(不管怎样,这都无关紧要)。但是msg_warn似乎没有被正确传递。我测试了向该函数添加更多变量。除了第一个可变参数msg_warn之外,它们都工作得很好。

我的代码出了什么问题?

代码语言:javascript
复制
void colorful_printf( const char* header, const char* color, const char* fmt, ... )
{
    printf("[%s%s%s] ", color, header, RESET_ANSI_COLOR);
    va_list args;
    va_start( args, fmt );
    vprintf(fmt, args);
    va_end( args );
}


void warning_printf( const char* fmt, ... )
{
    va_list args;
    va_start( args, fmt );
    colorful_printf("Warning", WARNING_COLOR, fmt, args);
    va_end( args );
}


char msg_warn[] = "Failed to initialize setting";
warning_printf( "%s address: 0x%2x", msg_warn, address );

在线编译器:link

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-12 08:45:38

您需要将va_list传递给需要它们的函数-类似于v*printf()函数。

代码语言:javascript
复制
void colorful_vprintf(const char* header, const char* color, const char* fmt, va_list args)
{
    printf("[%s%s%s] ", color, header, RESET_ANSI_COLOR);
    vprintf(fmt, args);
}

void colorful_printf(const char* header, const char* color, const char* fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    colorful_vprintf(header, color, fmt, args);
    va_end(args);
}

void warning_vprintf(const char* fmt, va_list args)
{
    colorful_vprintf("Warning", WARNING_COLOR, fmt, args);
}

void warning_printf(const char* fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    warning_vprintf(fmt, args);
    va_end(args);
}

*_vprintf函数执行实际工作;带有省略号的函数只是获取参数的va_list并将其传递给*_vprintf()函数。这是printf()系列函数的接口(包装器)的一般模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55642855

复制
相关文章

相似问题

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