va_start、va_end、va_arg、va_list、fprintf、 vfprintf用法解释

2024-06-07 04:38

本文主要是介绍va_start、va_end、va_arg、va_list、fprintf、 vfprintf用法解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天有个需求写文件,所有研究了一下标题的函数:
首先要使用va_start等这些方法需要包含头文件:

#include<stdarg.h>

直接上代码说明:

int MyWriteFile(char *format, ...)
{va_list paramList;char *para;//va_start函数来获取参数列表中的参数, 使paramList指向第一个可选参数va_start(paramList, format);FILE* pFile = fopen("123.txt", "a");while (1)   {   //va_arg返回参数列表中的当前参数并使paramList指向参数列表中的下一个参数, 而para则是获取的参数para = va_arg(paramList, char *);//这里做判断,是因为我在传参数的时候给了"",做完退出循环的条件if (strcmp( para, "") == 0)   break;  //以"MAX:%d  MIN:%d  str:%s " 的格式写入文件fprintf(pFile, "MAX:%d  MIN:%d  str:%s \n", INT_MAX, INT_MIN, para);}//其实就把format的第一个内容写到文件中//vfprintf(pFile, format, paramList);//va_end把paramList指针清为NULLva_end(paramList);return 0;
}

主函数:

int main()
{MyWriteFile("DEMO", "This", "is", "a", "demo!", "");return 0;
}

结果:

MAX:2147483647  MIN:-2147483648  str:This 
MAX:2147483647  MIN:-2147483648  str:is 
MAX:2147483647  MIN:-2147483648  str:a 
MAX:2147483647  MIN:-2147483648  str:demo! 

如果vfprintf这句打开注释,结果为:

MAX:2147483647  MIN:-2147483648  str:This 
MAX:2147483647  MIN:-2147483648  str:is 
MAX:2147483647  MIN:-2147483648  str:a 
MAX:2147483647  MIN:-2147483648  str:demo! 
DEMO

下面代码主要是va_start 、va_list,va_end, vfprintf
主要是vfprintf()会根据参数format字符串来转换并格式化数据,然后将结果输出到参数stream指定的文件中,直到出现字符串结束(‘\0’)为止

FILE *fp = fopen("123.txt", "a");;
int VfpDemo(char *fmt, ...)
{va_list argptr;int cnt;va_start(argptr, fmt);cnt = vfprintf(fp, fmt, argptr);va_end(argptr);return(cnt);
}
int main(void)
{int inumber = 30;float fnumber = 90.0;char string[4] = "abc";if (fp == NULL){exit(1);}VfpDemo("%d %f %s", inumber, fnumber, string);fclose(fp);return 0;
}

运行结果:

30 90.000000 abc

这篇关于va_start、va_end、va_arg、va_list、fprintf、 vfprintf用法解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038189

相关文章

#error用法

/* *检查编译此源文件的编译器是不是C++编译器 *如果使用的是C语言编译器则执行#error命令 *如果使用的是 C++ 编译器则跳过#error命令 */ #ifndef __cplusplus #error 亲,您当前使用的不是C++编译器噢! #endif #include <stdio.h> int main() {

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

tensorboard-----summary用法总结

Tensorflow学习笔记——Summary用法         最近在研究tensorflow自带的例程speech_command,顺便学习tensorflow的一些基本用法。 其中tensorboard 作为一款可视化神器,可以说是学习tensorflow时模型训练以及参数可视化的法宝。 而在训练过程中,主要用到了tf.summary()的各类方法,能够保存训练过程以及参数分布图并在

-bash: /bin/mv: Argument list too long mv

把labels下的所有文件mv到img文件夹下: mv labels/* img/ 报错: -bash: /bin/mv: Argument list too long  mv # Using find ... -exec + find folder2 -name '*.*' -exec mv --target-directory=folder '{}' +   # Using xar

vscode-创建vue3项目-修改暗黑主题-常见错误-element插件标签-用法涉及问题

文章目录 1.vscode创建运行编译vue3项目2.添加项目资源3.添加element-plus元素4.修改为暗黑主题4.1.在main.js主文件中引入暗黑样式4.2.添加自定义样式文件4.3.html页面html标签添加样式 5.常见错误5.1.未使用变量5.2.关闭typescript检查5.3.调试器支持5.4.允许未到达代码和未定义代码 6.element常用标签6.1.下拉列表

YTKKeyValueStore用法

iOS端的尝试 后来我从后台转做iOS端的开发,我就尝试了在iOS端直接使用Key-Value式的存储。经过在粉笔网、猿题库、小猿搜题三个客户端中的尝试后,我发现Key-Value式的存储不但完全能够满足大多数移动端开发的需求,而且非常适合移动端采用。主要原因是:移动端存储的数据量不会很大: 如果是单机的应用(例如效率工具Clear),用户自己一个人创建的数据最多也就上万条。 如果

redis高级用法

redis 慢日志查询 配置参数 slowlog-log-slower-than 10000 #单位微秒 slowlog-max-len 选项指定服务器最多保存多少条慢查询日志 redis-cli slowlog get #获取慢日志1) 1) (integer) 4 # 日志的唯一标识符(uid)2) (integer) 1378781447 # 命令执

Log4j用法

日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录,具体请参考Log4j文档指南。 Log4j下载 在apache网站,可以免费下载到Log4j最新版本的软件包 Apache log4j  (推荐) Apache log4j 2 Log4j的包下载完成后,解压,将其中打包好的的log4j-1.x.x.jar导入你的工程

Java零基础-集合:List

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛   今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初

CSS列表属性:list-style系列属性详解

CSS(层叠样式表)是用于控制网页样式的一种语言,它允许开发者以一种非常灵活的方式来设置网页元素的外观。在CSS中,list-style属性族是专门用来设置列表样式的。列表是网页设计中常见的元素,它们可以是有序列表(<ol>)或无序列表(<ul>)。list-style系列属性允许你自定义列表项前的标记,包括类型、位置和图像。 1. list-style-type list-style-typ