• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c(++)可变参数之格式化字符串

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

0、序言

  使用printf函数,其参数就是可变参数。下面将使用 C语言  的库函数实现可变参数的函数 。

  用途(欢迎补充):

    A、记录日志,可能需要将变量格式化输出到日志文件。

    B、格式化字符串,显示结果(A差不多)。

1、使用

  A、头文件

// 使用va_start需要的头文件
#include <stdarg.h>

  B、必须使用下面的3个宏 :

  va_list    va_start    va_end   

   C、使用函数: snprintf       (sprintf的升级版,避免缓冲区溢出)

  D、函数范例

void show_str(const char* pstr, ...);

 

2、一个例子

 1 #include <iostream>
 2 
 3 // 使用va_start需要的头文件
 4 #include <stdarg.h>
 5 
 6 void show_str(const char* pstr, ...)
 7 {
 8     va_list ap;
 9     va_start(ap, pstr);
10 
11     // 1、计算得到长度
12     //---------------------------------------------------
13     // 返回 成功写入的字符个数
14     int count_write = snprintf(NULL, 0, pstr, ap);
15     va_end(ap);
16 
17     // 长度为空
18     if (0 >= count_write)
19         return ;
20 
21     count_write ++;
22 
23     // 2、构造字符串再输出
24     //---------------------------------------------------
25     va_start(ap, pstr);
26     
27     char *pbuf_out    = NULL;
28     pbuf_out = (char *)malloc(count_write);
29     if (NULL == pbuf_out)
30     {
31         va_end(ap);
32         return;
33     }
34 
35     // 构造输出
36     vsnprintf(pbuf_out, count_write, pstr, ap);
37     // 释放空间
38     va_end(ap);
39 
40     // 输出结果
41     std::cout << "str = " << pbuf_out << "\n";
42 
43     // 释放内存空间
44     free(pbuf_out);
45     pbuf_out = NULL;
46 }
47 
48 
49 // 入口函数
50 int main(int argc, char *argv[])
51 {
52     show_str("123, %s, %s", "ABC", "-=+");
53 
54     system("pause");
55     return 0;
56 }

  show_str函数实现输出构造好的字符串。

 

3、结果

  演示环境: VS2015 up3

  输出结果:

 

4、总结

  A、注意 ,这里是malloc , 需要与 free 配对使用,避免内存泄漏

  B、注意,va_start 需要与 va_end 配对使用。

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#实现动态添加用户控件发布时间:2022-07-14
下一篇:
C++语言实现-邻接矩阵发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap