va_list函数族应用
来源:互联网 发布:情义我心知解析 编辑:程序博客网 时间:2024/05/17 09:17
va_start()va_end()函数应用:
man:
#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);
1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表
void foo(...);
void foo(parm_list,...);
/*argp指向传入的第一个可选参数,msg是最后一个确定的参数*/
va_start( argp, msg );
4.va_start使argp指向第一个可选参数。va_arg返回参数列表中的当前参数并使argp指向参数列表中的下一个参数。va_end把argp指针清为NULL。函数体内可以多次遍历这些参数,但是都必须以va_start开始,并以va_end结尾。
//vstart.c#include <stdio.h>#include <strings.h>#include <stdarg.h>int demo(char *fmt, ...);int main() { demo("DEMO", "This", "is", "a", "demo!", ""); return 0;} int demo( char *fmt, ... ) { va_list argp; int argno = 0; char *para; va_start(argp, fmt); while (1) { para = va_arg(argp, char *); if (strcmp( para, "") == 0) break; printf("Parameter #%d is: %s/n", argno, para); argno++; } va_end( argp ); return 0; }
编译运行:
[root@fly test]# gcc -o vstart vstart.c
[root@fly test]# ./vstart
Parameter #0 is: This
Parameter #1 is: is
Parameter #2 is: a
Parameter #3 is: demo!
[root@fly test]#
注意:va_arg()的格式:
type va_arg(va_list ap, type);
因此:
int d;
char c, *s;
d = va_arg(ap, int); /* int */
c = (char) va_arg(ap, int); /* char */
s = va_arg(ap, char *); /* string */
#include <stdio.h>#include <stdarg.h>#include <string.h>int foo(char *fmt, ...);int main(){ char *a = "ast"; int b = 224; char c = 'x'; foo("%s,%d,%c/n",a,b,c); return 0;}int foo(char *fmt, ...){ va_list ap; int d; char c, *s; va_start(ap, fmt); while (*fmt) switch(*fmt++) { case 's': /* string */s = va_arg(ap, char *); printf("string %s/n", s); break; case 'd': /* int */ d = va_arg(ap, int); printf("int %d/n", d); break; case 'c': /* char */ /* need a cast here since va_arg only takes fully promoted types */ c = (char) va_arg(ap, int); printf("char %c/n", c); break; } va_end(ap); return 0;}
编译运行:
[root@fly test]# gcc -o start start.c
[root@fly test]# ./start
string ast
int 224
char x
[root@fly test]#
注意foo()格式:
foo("%s,%d,%c/n",a,b,c);
- va_list函数族应用
- va_list 应用
- va_start,va_arg,va_end,va_list应用举例--实现可变参数的函数
- va_list可变参数的函数
- 变参函数和va_list
- vsprintf函数和va_list用法
- va_list
- va_list
- va_list
- va_list
- va_list
- va_list
- va_list
- va_list
- va_list
- Va_list
- va_list
- va_list
- HDU 1856 简单并查集
- DVD机读碟故障维修技巧
- OpenCore介绍
- RCU机制(转)
- 十六进制字符串转换为十六进制数字
- va_list函数族应用
- Android真机如何开启logcat
- WIN7系统下重装XP系统
- jquery笔记-外部插入节点
- 深入理解Java虚拟机——高效并发
- ubuntu 下mysql apache php安装
- 【HULFT】Hulft for Linux のセットアップ
- 贪心算法-活动选择
- 自定义ckeditor编辑器的工具样式