第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型的参数。其具体代码如下:

    img546

    运行结果如图15.1所示。

    img547

    图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变为无效值。其具体代码如下:

    img548

    运行结果如图15.2所示。

    img549

    图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作为起始地址。其具体代码如下:

    img550

    img551

    运行结果如图15.3所示。

    img552

    图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中。其具体代码如下:

    img553

    img554

    运行结果如图15.4所示。

    img555

    图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”。其具体代码如下:

    img556

    运行结果如图15.5所示。

    img557

    图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中。其具体代码如下:

    img558

    运行结果如图15.6所示。

    img559

    图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”按指定格式进行输出。其具体代码如下:

    img560

    img561

    运行结果如图15.7所示。

    img562

    图15.7 使用vsprintf()函数实现将字符串的内容格式化输出 15.8 vscanf()——执行格式化输入函数 vscanf()函数

    实用程度:★★★☆☆

    实例位置:配套资源\SL\15\08

    vscanf()函数用于实现格式化输入。

    语法

    int vscanf(char *format, va_list param);

    vscanf()函数的语法参数说明如下:

    参数format为要输入的格式。

    参数param为要处理的参数。

    vscanf()函数的返回值:输入的字符。

    示例

    本示例演示用vscanf()函数将字符按照指定格式输入到流a中。其具体代码如下:

    img563

    img564

    运行结果如图15.8所示。

    img565

    图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中。其具体代码如下:

    img566

    img567

    运行结果如图15.9所示。

    img568

    图15.9 使用vsscanf()函数执行流中格式化输入