va_list介绍

news/2024/11/15 0:40:56/

va_list是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;
可变参数中的每个参数的类型可以不同,也可以相同;
可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。

va_list表示可变参数列表类型,实际上就是一个char指针fmt。

c语言提供了函数的不定长参数使用,比如 void func(int a, …)。三个省略号,表示了不定长参数。注意:c标准规定了,函数必须至少有一个明确定义的参数,因此,省略号前面必须有至少一个参数。

va_list
宏定义了一个指针类型,这个指针类型指向参数列表中的参数。

void va_start(va_list ap, last_arg)
修改了用va_list申明的指针,比如ap,使这个指针指向了不定长参数列表省略号前的参数。

type va_arg(va_list, type)
获取参数列表的下一个参数,并以type的类型返回。

void va_end(va_list ap)
参数列表访问完以后,参数列表指针与其他指针一样,必须收回,否则出现野指针。一般va_start 和va_end配套使用。

_vsnprintf
用于向字符串中打印数据、数据格式用户自定义

int _vsnprintf(char* str, size_t size, const char* format,va_list ap);

char *str [out],把生成的格式化的字符串存放在这里.
size_t size [in], str可接受的最大字符数 (非字节数,UNICODE一个字符两个字节),防止产生数组越界.
const char *format [in], 指定输出格式的字符串,它决定了你需要提供的可变参数的类型、个数和顺序。
va_list ap [in], va_list变量. va:variable-argument:可变参数

函数的参数一般从右至左先后入栈,根据栈的特性,也就是,最左边的参数最先出栈。贴一段代码介绍下va_list、va_start和va_end的使用。

代码举例


```bash
#include <stdio.h>
#include <stdarg.h>
void functestarg(int, …);
int main ()
{
functestarg(1,2,3,4,5,6,7,8,9,10,0);
return 0;
}
void functestarg(int a, …)
{
va_list argpointer;
va_start(argpointer, a);
int argument;
int count = 0;
while(0 != (argument = va_arg(argpointer, int)))
{
printf(“parameter%d:%d\n”, ++count, argument);
}
}


http://www.ppmy.cn/news/222258.html

相关文章

使用VA助手如何快速添加注释(按doxygen注释规范)

原文首发于微信公众号「3D视觉工坊」&#xff1a;使用VA助手如何快速添加注释(按doxygen注释规范) 首先&#xff0c;关于VA助手的破解安装教程&#xff0c;请参考&#xff1a;VS2015 Visual Assist X 破解版安装教程 此处分享一下我在工程中使用VA助手进行快速注释的小技巧&am…

修改va0n的title

va01 va02 va03用于管理销售订单&#xff0c;他们的抬头是&#xff1a;Create Sales Order: Initial Screen。 本文介绍如何通过隐式增强修改它的title:&#xff08;恨透了csdn不能插入图片&#xff09; TCODE: VA01 SYSTEM->>STATUS 双击进入屏幕101 双击module cua…

va_list使用方法

转载自&#xff1a;http://blog.csdn.net/ID314846818/article/details/51074283 VA_LIST 是在C语言中解决变参问题的一组宏&#xff0c;变参问题是指参数的个数不定&#xff0c;可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个…

2021-CISCN-fianl-ezj4va

2021-CISCN-fianl-ezj4va 前言 去年国赛决赛的0解Java&#xff0c;后来出现在了DASCTF八月挑战赛&#xff0c;当时不太会Java所以没有看&#xff0c;今天找个时间复现了一下。写的比较简单&#xff0c;具体可以看参考链接中的文章。 代码审计 访问/robots.txt得到文件名可以…

va_list深究

2011-04-21 21:06:11| 分类&#xff1a; C/C|字号 订阅 VA函数&#xff08;variable argument function&#xff09;&#xff0c;参数个数可变函数&#xff0c;又称可变参数函数。C/C编程中&#xff0c;系统提供给编程人员的va函数很少。*printf()/*scanf()系列函数&#xff0…

c语言va_start函数,va_start和va_end,以及c语言中的可变参数原理

FROM&#xff1a;http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html 本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox详解中曾使用到va_start和va_end这两个宏&#xff0c;但对它们也只是泛泛的了解。 介绍这两个宏之前先看一…

va start linux头文件,va_start/va_end函数-linux

#include void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); void va_copy(va_list dest, va_list src); 1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表 void foo(...); void foo(parm_list,...); 2:函数参数…

va_list语法

va_list &#xff08;1&#xff09;va_list类型&#xff0c;定义该类型变量来指向可变参数的地址。它的定义为&#xff1a; typedef char * va_list;&#xff08;2&#xff09;va_start(va_list, arg)&#xff0c;va_start初始化va_list变量&#xff0c;使得va_list变量指向…