mamutu02
mamutu02
采纳率83.3%
2016-08-09 06:23 阅读 7.3k
已采纳

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

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

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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

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

    用vsnprintf()函数即可

    点赞 评论 复制链接分享
  • cyixian 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);
    }

    点赞 1 评论 复制链接分享

相关推荐