C 中解决可变参数的几组宏 va_start、va_arg、va_end等
来源:互联网 发布:淘宝 优惠券 设置 编辑:程序博客网 时间:2024/06/12 01:17
在C语言中有时候会用到可变参数,利用va_list这组宏就可以解决:
#include <stdarg.h> void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); void va_copy(va_list dest, va_list src);
va_list的用法:
(1)首先在函数里定义一个va_list型的变量,这个变量是指向参数的指针
(2)然后用va_start宏初始化变量刚定义的va_list变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数。(如在运行va_start(ap,fmt)以后,ap指向第一个可变参数在堆栈的地址。)
(3)然后用va_arg返回可变的参数,va_arg的第二个参数是你要返回的参数的类型。
(4)最后用va_end宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了。如果函数有多个可变参数的,依次调用va_arg获取各个参数。
用法示例:va_test.c
#include <stdio.h>#include <string.h>#include <stdarg.h>#define DEBUG#define Log_file "./log.txt"int DoSystem(char *fmt, ...){ va_list vargs; char cmd[1024]=" ", *para; char buf[256]=" "; int rc = 0; int n, fmtn=0; va_start(vargs, fmt);//这里fmt必须是...的前一个参数. n = vsnprintf(cmd, sizeof(char)*1024, fmt, vargs);//将变参列表 vargs 以fmt格式化打印到cmd中 while ( fmtn<3 ){ para = va_arg( vargs, char *);//获取每一个参数值 if ( strcmp(para, "") == 0 ) break; fmtn++; printf("fmtn = %d ,fmt=%s\n",fmtn,para); //memset(para,0,sizeof(para)); } va_end(vargs); if (n > 0) { #ifdef DEBUG fprintf(stderr, "%s\n", cmd); //sprintf(cmd,"%s > log.txt",cmd); rc = system(cmd); #endif } return rc;}int main(){ char buff[]="al"; char buff1[]="-"; DoSystem("ls %s%s > %s",buff1,buff,Log_file); //DoSystem("ps -ef | grep ps",buff); return 0;}
编译结果:
- C 中解决可变参数的几组宏 va_start、va_arg、va_end等
- C/C++中va_list,va_start,va_arg,va_end等可变参数宏的使用
- C语言可变参数va_start、va_arg、va_end的用法
- 可变参数va_start, va_arg, va_end的用法
- 可变参数va_start, va_arg, va_end的用法
- 可变参数va_start,va_arg,va_end的用法
- 可变参数va_start,va_arg,va_end的用法
- 可变参数va_start,va_arg,va_end的用法
- va_start,va_arg,va_end 可变参数的总结
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- C语言中可变参数的用法——va_list、va_start、va_arg、va_end参数定义
- 可变参数va_start,va_arg,va_end
- 可变参数, va_start, va_arg, va_end
- Web前端开发框架
- [笔记] GSOAP + APACHE SERVER 开发 FEMTO网管系统
- oracle case when 用法
- com.ibm.jms.JMSBytesMessage cannot be cast to javax.jms.TextMessage
- 最小生成树Prim算法模板
- C 中解决可变参数的几组宏 va_start、va_arg、va_end等
- JSTL(JSP标准标签库)介绍
- Firebug使用之三--Script Panel
- Android中的Selector
- cocos2d-x与CocosBuilder
- ios基础知识——get,set方法
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- hdu4268 Alice and Bob
- android关于AndroidManifest.xml详细分析