mamutu02
2016-08-09 06:23
采纳率: 83.3%
浏览 7.9k
已采纳

C语言可变参数如何传递给另一个接受可变参数的函数?

比如说,有一个log_printf的函数定义如下:

void log_printf(char *fmt, ...);

参数fmt和后面的变参,调用规则和printf相同。该函数使用sprintf,将fmt和之后的参数转换成格式化字符串,再使用fwrite写入到文件,或使用OutputDebugStirng输出调试信息。

那么,如何在该函数内部将fmt和后面的变参传递给sprintf?C语言能否实现这一操作?还是必须使用内嵌汇编?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • cyixian 2016-08-09 06:37
    已采纳

    用vsnprintf()函数即可

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • cyixian 2016-08-09 06:41

    这是网上找的代码 你可以参考一下
    #include
    #include
    int mon_log(char* format, ...)
    {
    char str_tmp[50];
    int i=0;
    va_list vArgList; //定义一个va_list型的变量,这个变量是指向参数的指针.
    va_start (vArgList, format); //用va_start宏初始化变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
    i=_vsnprintf(str_tmp, 50, format, vArgList); //注意,不要漏掉前面的_
    va_end(vArgList); //用va_end宏结束可变参数的获取
    return i; //返回参数的字符个数中间有逗号间隔
    }
    //调用上面的函数
    void main() 
    {
    int i=mon_log("%s,%d,%d,%d","asd",2,3,4);
    printf("%d\n",i);
    }

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题