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

相关文章

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/locat

Collection List Set Map的区别和联系

Collection List Set Map的区别和联系 这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否

Oracle Start With关键字

Oracle Start With关键字 前言 旨在记录一些Oracle使用中遇到的各种各样的问题. 同时希望能帮到和我遇到同样问题的人. Start With (树查询) 问题描述: 在数据库中, 有一种比较常见得 设计模式, 层级结构 设计模式, 具体到 Oracle table中, 字段特点如下: ID, DSC, PID; 三个字段, 分别表示 当前标识的 ID(主键), DSC 当

UVM:callback机制的意义和用法

1. 作用         Callback机制在UVM验证平台,最大用处就是为了提高验证平台的可重用性。在不创建复杂的OOP层次结构前提下,针对组件中的某些行为,在其之前后之后,内置一些函数,增加或者修改UVM组件的操作,增加新的功能,从而实现一个环境多个用例。此外还可以通过Callback机制构建异常的测试用例。 2. 使用步骤         (1)在UVM组件中内嵌callback函

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

这些ES6用法你都会吗?

一 关于取值 取值在程序中非常常见,比如从对象obj中取值 const obj = {a:1b:2c:3d:4} 吐槽: const a = obj.a;const b = obj.b;const c = obj.c;//或者const f = obj.a + obj.b;const g = obj.c + obj.d; 改进:用ES6解构赋值

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At