函数声明 | 函数功能 |
---|---|
| 用于初始化一个 |
| 用于从可变参数列表中获取下一个参数,并将其转换为指定的类型 |
| 用于将一个 |
| 用于清理一个 |
| 用于将格式化输出写入到指定的文件流中 |
| 用于将指定文件流中的格式化输入读取到指定变量中 |
| 它使用格式化字符串 |
| 它使用格式化字符串 |
| 它使用格式化字符串 |
| 它使用格式化字符串 |
函数声明 | 函数功能 |
---|---|
| 用于初始化一个 |
参数:
#include <stdio.h>
#include <stdarg.h>
void print_args(int count, ...)
{
va_list args1, args2;
int i;
va_start(args1, count); /* 初始化可变参数列表 */
/* 复制可变参数列表 */
va_copy(args2, args1);
for (i = 0; i < count; i++)
{
int arg1 = va_arg(args1, int); /* 获取下一个参数 */
int arg2 = va_arg(args2, int);
printf("arg[%d] = %d %d\n", i, arg1, arg2);
}
va_end(args2); /* 清理复制的可变参数列表 */
va_end(args1); /* 清理原始可变参数列表 */
}
int main()
{
print_args(3, 10, 20, 30);
return 0;
}
在上面的示例代码中,
print_args()
函数,并传入了 4 个入参,第一个为 可变参数的个数,后面三个为具体的整数型可变参数。print_args()
函数内部,我们首先定义了两个 va_list
类型的变量 args1
和 args2
,并使用 va_start()
函数初始化 args1
变量。va_copy()
函数将 args1
复制到 args2
中,并使用 for
循环和 两个 va_arg()
函数来分别访问这两个可变参数列表,并依次输出每个参数的值。va_end()
函数来清理这两个可变参数列表。函数声明 | 函数功能 |
---|---|
| 用于从可变参数列表中获取下一个参数,并将其转换为指定的类型 |
参数:
可参考 1.2 中所示
函数声明 | 函数功能 |
---|---|
| 用于将一个 |
参数:
可参考 1.2 中所示
函数声明 | 函数功能 |
---|---|
| 用于清理一个 |
参数:
可参考 1.2 中所示
函数声明 | 函数功能 |
---|---|
| 用于将格式化输出写入到指定的文件流中 |
参数:
va_list
类型的变量,包含了可变参数列表#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
FILE *fp;
int vfpf(const char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vfprintf(fp, fmt, argptr);
va_end(argptr);
return cnt;
}
int main()
{
int inumber;
float fnumber;
char string[4];
fp = tmpfile();
if (fp == NULL)
{
perror("tmpfile() call");
exit(1);
}
vfpf("%d %f %s", 30, 90.0, "abc");
rewind(fp);
fscanf(fp,"%d %f %s", &inumber, &fnumber, string);
printf("%d %.2f %s\n", inumber, fnumber, string);
fclose(fp);
return 0;
}
在上述的示例代码中,
inumber
、fnumber
和 string
;tmpfile()
函数创建一个临时文件,并将返回的文件指针赋值给全局变量 fp
。如果创建文件失败,则打印错误信息并退出程序;vfpf()
函数来向临时文件中写入数据。它里面使用 vfprintf()
函数将格式化输出写入到一个文件流中;rewind()
函数将文件指针重新定位到文件开头;fscanf()
函数从文件中读取数据,并使用 printf()
函数中输出从文件中读取的数据【其中浮点数部分保留两位小数】fclose()
函数关闭文件指针,并结束程序函数声明 | 函数功能 |
---|---|
| 用于将指定文件流中的格式化输入读取到指定变量中 |
参数:
va_list
类型的变量,包含了可变参数列表返回值:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
FILE *fp;
int vfsf(const char *fmt, ...) {
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vfscanf(fp, fmt, argptr);
va_end(argptr);
return cnt;
}
int main()
{
int inumber;
float fnumber;
char string[4];
fp = tmpfile();
if (fp == NULL)
{
perror("tmpfile() call");
exit(1);
}
fprintf(fp, "%d %f %s", 30, 90.0, "abc");
rewind(fp);
vfsf("%d %f %s", &inumber, &fnumber, string);
printf("%d %.2f %s\n", inumber, fnumber, string);
fclose(fp);
return 0;
}
在上面的示例代码中,
inumber
、fnumber
和 string
;tmpfile()
函数创建一个临时文件,并将返回的文件指针赋值给全局变量 fp
。如果创建文件失败,则打印错误信息并退出程序;fprintf()
函数将三个数据(一个整型数字、一个浮点数和一个字符串)写入该文件中;rewind()
函数将文件指针重新定位到文件开头;vfsf()
函数,里面使用 vfscanf()
函数从文件中读取数据;函数声明 | 函数功能 |
---|---|
| 它使用格式化字符串 |
参数:
va_list
类型的变量,包含了可变参数列表#include <stdio.h>
#include <stdarg.h>
void myprint(const char *format, ...)
{
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
int main()
{
int a = 10;
float b = 3.14;
char s[] = "hello";
myprint("a=%d, b=%.2f, s=%s\n", a, b, s);
return 0;
}
在上面的示例代码中,
a
、浮点型 b
和 字符数组 s
;myprint()
函数将这些变量的值输出到标准输出流 stdout 中;
在 myprint()
函数中,
- 我们首先使用 va_start()
宏初始化一个 va_list
变量 args
;
- 然后调用 vprintf()
函数将格式化字符串和参数列表传递给该函数进行输出;
- 最后使用 va_end()
宏清理 args
变量。函数声明 | 函数功能 |
---|---|
| 它使用格式化字符串 |
参数:
va_list
类型的变量,包含了可变参数列表#include <stdio.h>
#include <stdarg.h>
void myscan(const char *format, ...)
{
va_list args;
va_start(args, format);
vscanf(format, args);
va_end(args);
}
int main()
{
int a;
float b;
char s[10];
myscan("%d%f%s", &a, &b, s);
printf("a=%d, b=%.2f, s=%s\n", a, b, s);
return 0;
}
在上面的示例代码中,
a
、浮点型 b
和 字符数组 s
;myscan()
函数从标准输入流 stdin
中读取数据,并将数据存储到这些变量中
在 myscan()
函数中,
- 我们首先使用 va_start()
宏初始化一个 va_list
变量 args
;
- 然后调用 vscanf()
函数将格式化字符串和参数列表传递给该函数进行输入;
- 最后使用 va_end()
宏清理 args
变量。函数声明 | 函数功能 |
---|---|
| 它使用格式化字符串 |
参数:
va_list
类型的变量,包含了可变参数列表#include <stdio.h>
#include <stdarg.h>
void myprint(const char *format, ...)
{
char buffer[100];
va_list args;
va_start(args, format);
vsprintf(buffer, format, args);
va_end(args);
printf("%s", buffer);
}
int main()
{
int a = 10;
float b = 3.1415;
char s[] = "huazie";
myprint("a=%d, b=%.4f, s=%s\n", a, b, s);
return 0;
}
在上面的示例代码中,
a
、浮点型 b
和 字符数组 s
;myprint()
函数将格式化字符串和这些变量的值输出到字符数组 buffer
中,并打印输出字符数组 buffer
;
在 myprint()
函数中,
- 我们首先使用 va_start()
宏初始化一个 va_list
变量 args
;
- 然后调用 vsprintf()
函数将格式化字符串和参数列表传递给该函数进行输出,并将输出结果存储到 buffer
数组中;
- 最后使用 va_end()
宏清理 args
变量。函数声明 | 函数功能 |
---|---|
| 它使用格式化字符串 |
参数:
va_list
类型的变量,包含了可变参数列表#include <stdio.h>
#include <stdarg.h>
void myscan(const char *str, const char *format, ...)
{
va_list args;
va_start(args, format);
vsscanf(str, format, args);
va_end(args);
}
int main()
{
int a;
float b;
char s[10];
char buffer[] = "10 3.1415 huazie";
myscan(buffer, "%d%f%s", &a, &b, s);
printf("a=%d, b=%.4f, s=%s\n", a, b, s);
return 0;
}
在上面的示例代码中,
a
、浮点型 b
、 字符数组 s
和 字符数组 buffer
;myscan()
函数从字符数组 buffer
中读取数据,并将数据存储到另外 3
个变量中;
在 myscan()
函数中,
- 我们首先使用 va_start()
宏初始化一个 va_list
变量 args
;
- 然后调用 vsscanf()
函数将字符数组 buffer
和格式化字符串以及参数列表传递给该函数进行输入,并将数据存储到相应的变量中;
- 最后使用 va_end()
宏清理 args
变量。buffer
中读取并输入的三个变量的数据,并结束程序。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。