第15章 标准库函数库:stdarg.h 在C语言中,有些库函数或用户自定义函数的参数是可变的,常用省略号“……”,定义这样的函数就用到了标准库函数库stdarg.h中的宏,该函数库还包括格式化输入/输出、可变参数开关等参数处理函数。 15.1 va_arg()——调用可变参数列表函数 va_arg()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\15\01
va_arg()函数用于调用可变参数列表。
语法
type va_arg(va_list ap, type);
va_arg()函数的语法参数说明如下:
参数ap为可变参数自身。
参数type为要获取的参数的指定类型,返回这个指定类型的值,并把ap的位置指向变参表的下一个变量位置。
va_arg()函数没有返回值。
示例
本示例演示用va_arg()函数改变arg_ptr的值,连续不断地获取下一个char型的参数。其具体代码如下:
运行结果如图15.1所示。
图15.1 使用va_arg()函数调用可变参数列表 15.2 va_end()——停止使用可变参数函数 va_end()函数
实用程度:★★★★☆
实例位置:配套资源\SL\15\02
va_end()函数用于停止使用可变参数。
语法
void va_end(va_list ap);
va_end()函数的语法参数说明如下:
参数ap为参数自身。
va_end()函数没有返回值。
示例
本示例演示用va_end()函数作为可变参数arg_ptr的结束标志,执行后的arg_ptr变为无效值。其具体代码如下:
运行结果如图15.2所示。
图15.2 使用va_end()函数停止使用可变参数 15.3 va_start()——开始使用可变参数函数 va_start()函数
实用程度:★★★★☆
实例位置:配套资源\SL\15\03
va_start()函数用于开始使用可变参数。
语法
void va_start(va_list ap, param);
va_start()函数的语法参数说明如下:
参数ap表示参数自身。
参数param为第一个参数。
va_start()函数没有返回值。
示例
本示例演示用va_start()函数开始使用可变参数arg_ptr,并以i作为起始地址。其具体代码如下:
运行结果如图15.3所示。
图15.3 使用va_start()函数开始使用可变参数 15.4 vfprintf()——格式化输出流函数 vfprintf()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\15\04
vfprintf()函数用于以格式化形式将一个字符串写给指定的流。
语法
int vfprintf(FILE p, char format, va_list param);
vfprintf()函数的语法参数说明如下:
参数p为要从中读取字符的文件流。
参数format为输出的格式。
参数param为处理参数。
vfprintf()函数的返回值:实际输出的字符数。
示例
本示例演示用vfprintf()函数以指定格式化形式分别将字符串“15”、“3.14”和“res”写入指定流a中。其具体代码如下:
运行结果如图15.4所示。
图15.4 使用vfprintf()函数格式化输出流 15.5 vfscanf()——执行流中格式化输入函数 vfscanf()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\15\05
vfscanf()函数用于以格式化形式从流中读入一个字符串。
语法
int vfscanf(FILE p, char format, va_list param);
vfscanf()函数的语法参数说明如下:
参数p为要输入的流。
参数format为输入的格式。
参数param为要处理的参数。
vfscanf()函数的返回值:输入的字符。
示例
本示例演示用vfscanf()函数以指定的格式化形式从流a中读入字符“24”、“40.0”和“boy”。其具体代码如下:
运行结果如图15.5所示。
图15.5 使用vfscanf()函数以格式化输入流 15.6 vprintf()——格式化输出函数 vprintf()函数
实用程度:★★☆☆☆
实例位置:配套资源\SL\15\06
vprintf()函数用于格式化字符串输出到控制台(显示器)。
语法
int vprintf(char *format, va_list param);
vprintf()函数的语法参数说明如下:
参数format为输出的格式。
参数param为处理参数。
vprintf()函数的返回值:实际输出的字符数。
示例
本示例演示用vprintf()函数以指定格式将字符串“25”、“47.0”和“new”输出到stdout中。其具体代码如下:
运行结果如图15.6所示。
图15.6 使用vprintf()函数格式化输出stdout中 15.7 vsprintf()——格式化输出串函数 vsprintf()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\15\07
vsprintf()函数用于将字符串的内容重新写为格式化后的字符串。
语法
int vsprintf(char s, char format, va_list param);
vsprintf()函数的语法参数说明如下:
参数s为要输出的字符串。
参数format为输出的格式。
参数param为处理的参数。
vsprintf()函数的返回值:字符串s的长度。
示例
本示例演示用vsprintf()函数将字符串“35”、“12.4”和“old”按指定格式进行输出。其具体代码如下:
运行结果如图15.7所示。
图15.7 使用vsprintf()函数实现将字符串的内容格式化输出 15.8 vscanf()——执行格式化输入函数 vscanf()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\15\08
vscanf()函数用于实现格式化输入。
语法
int vscanf(char *format, va_list param);
vscanf()函数的语法参数说明如下:
参数format为要输入的格式。
参数param为要处理的参数。
vscanf()函数的返回值:输入的字符。
示例
本示例演示用vscanf()函数将字符按照指定格式输入到流a中。其具体代码如下:
运行结果如图15.8所示。
图15.8 使用vscanf()函数实现格式化输入 15.9 vsscanf()——执行流中格式化输入函数 vsscanf()函数
实用程度:★★★☆☆
实例位置:配套资源\SL\15\09
vsscanf()函数用于执行流中格式化输入。
语法
int vsscanf(char s, char format, va_list param);
vsscanf()函数的语法参数说明如下:
参数s为要执行的流。
参数format为输入的格式。
参数param为要处理的参数。
vsscanf()函数的返回值:输入的字符。
示例
本示例演示用vsscanf()函数将字符数组str中的字符按指定格式输入到流a中。其具体代码如下:
运行结果如图15.9所示。
图15.9 使用vsscanf()函数执行流中格式化输入