By qianghaohao(Xqiang)
在C语言中当一个函数参数无法列举出来,或者参数个数
不确定,这时我们将函数声明为可变参数的形式,根据需
要传适当个数的参数.举例如下:
int fun(char *fmt, ...);
... 表示此函数fmt后面可以传任意数目的参数.
我们所熟悉的printf函数便是利用了这一特性,printf
函数声明如下:
int printf(const char *, ...);
以下介绍如何利用此类函数打印函数的所有参数,总共
介绍了三种方法:
以此函数声明为例:int fun(char *fmt, ...);
在介绍之前得先搞清楚以下相关的函数(在stdarg.h中声明):
1.va_list
定义一个va_list变量,后面的操作都和此变量有关.
ex: va_list ap;
2.va_start
初始化va_list变量,让ap指向可变参数表的第一个参数,即
...参数中的第一个参数.此函数第一个参数为ap,第二个参
数为第一个可变参数的前一个参数,即...前的那一个参数.
ex: va_start(ap, fmt);
3.va_arg
获取可变参数,此函数第一个参数为ap,第二个参数为要获取
的类型.返回指定类型的的变量,然后让ap指向可变参数表的
下一个参数.
ex: va_arg(ap, char *);
4.va_end
使用完后释放ap变量
ex: va_end(ap);
5. int vsprintf(char *string, char *format, va_list param);
按照format格式化输出参数到string,format类似于printf的
格式化串,param是va_list变量.
ex: ---摘自百度百科
#include <stdarg.h>
#include<stdio.h>
char buffer[80];
int vspf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vsprintf(buffer, fmt, argptr);
va_end(argptr);
return(cn
不确定,这时我们将函数声明为可变参数的形式,根据需
要传适当个数的参数.举例如下:
int fun(char *fmt, ...);
... 表示此函数fmt后面可以传任意数目的参数.
我们所熟悉的printf函数便是利用了这一特性,printf
函数声明如下:
int printf(const char *, ...);
以下介绍如何利用此类函数打印函数的所有参数,总共
介绍了三种方法:
以此函数声明为例:int fun(char *fmt, ...);
在介绍之前得先搞清楚以下相关的函数(在stdarg.h中声明):
1.va_list
定义一个va_list变量,后面的操作都和此变量有关.
ex: va_list ap;
2.va_start
初始化va_list变量,让ap指向可变参数表的第一个参数,即
...参数中的第一个参数.此函数第一个参数为ap,第二个参
数为第一个可变参数的前一个参数,即...前的那一个参数.
ex: va_start(ap, fmt);
3.va_arg
获取可变参数,此函数第一个参数为ap,第二个参数为要获取
的类型.返回指定类型的的变量,然后让ap指向可变参数表的
下一个参数.
ex: va_arg(ap, char *);
4.va_end
使用完后释放ap变量
ex: va_end(ap);
5. int vsprintf(char *string, char *format, va_list param);
按照format格式化输出参数到string,format类似于printf的
格式化串,param是va_list变量.
ex: ---摘自百度百科
#include <stdarg.h>
#include<stdio.h>
char buffer[80];
int vspf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vsprintf(buffer, fmt, argptr);
va_end(argptr);
return(cn