当前位置: 首页 > news >正文

加盟平台响应网站建设广东省白云区

加盟平台响应网站建设,广东省白云区,做设计网站的工作怎么样,网站代码审计Linux C语言 26-可变参数 本节关键字:可变参数、va_list、va_arg、va_end 相关C库函数:va_list、va_arg、va_end 什么是可变参数? C语言中的可变参数是指函数能够接受不定数量的参数。在不确定函数参数时,使用“char *format, …

Linux C语言 26-可变参数

本节关键字:可变参数、va_list、va_arg、va_end
相关C库函数:va_list、va_arg、va_end

什么是可变参数?

C语言中的可变参数是指函数能够接受不定数量的参数。在不确定函数参数时,使用“char *format, …”的方式提供多个参数的输入。可变参数的引入旨在解决:

  • 变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;
  • 可变参数中的每个参数的类型可以不同,也可以相同;
  • 可变参数的每个参数并没有实际的名称与之相对应。
    因此,当函数的参数个数不确定时,就可以使用可变参数进行动态处理,这样就打打增加了程序的灵活性。

相关宏和函数

#include <stdarg.h>
#define va_start(v,l)    __builtin_va_start(v,l)
#define va_end(v)    __builtin_va_end(v)
#define va_arg(v,l)    __builtin_va_arg(v,l)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);int printf(const char *format, ...);
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);

va_list的使用

(1)在函数中定义一个具有va_list型的变量,这个变量是指向参数的指针。
(2)用va_start宏初始化变量刚定义的va_list变量,使其指向第一个可变参数的地址。
(3)va_arg返回可变参数,va_arg的第二个参数是你要返回的参数的类型(如果多个可变参数,依次调用va_arg获取各个参数)。
(4)最后使用va_end宏结束可变参数的获取。

在使用va_list是应该注意以下问题:

  • 可变参数的类型和个数完全由代码控制,它并不能智能地识别不同参数的个数和类型。
  • 如果我们不需要一一详解每个参数,只需要将可变列表拷贝到某个缓冲区,可以用vsprintf函数。
  • 因为编译器对可变参数的函数原型检查不够严格,对编程查错不利,不利于我们写出高质量的代码。

va_list使用例程

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>void myprint(const char *format, ...)
{char str[1024] = {0};va_list vList;va_start(vList, format);vsprintf(str, format, vList);va_end(vList);printf("%s\n", str);
}int sum(char *format, ...)
{va_list vList;int nStep, sNum=0;va_start(vList, format);printf("%s\n", format);while (nStep = va_arg(vList, int)){// va_arg负责取出符合参数类型的下一个指针// 第一个参数时可变参数变量,第二个参数是传入参数类型,sNum += nStep;}va_end(vList);return sNum;
}int main(int argc, char *argv[])
{int rc;time_t tnow = time(0);struct tm *t = localtime(&tnow);myprint("%04d-%02d-%02d %02d:%02d:%02d %s\n", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec,"this is va_list testing program.");rc = sum("Hello World!", 1, 2, 3, 4);myprint("rc=%d\n", rc);return 0;
}/** 运行结果:
2023-11-24 16:57:01 this is va_list testing program.Hello World!
rc=10*/
http://www.yayakq.cn/news/890846/

相关文章:

  • 巴中移动网站建设wordpress钩子自定义钩子
  • 汉化版网站开发软件深圳做网站企业
  • 个人网站用凡科建站好吗企业邮箱的推荐
  • 跨境电商网站制作少儿编程课有没有必要学
  • 企业门户网站管理办法wordpress sae 安装主题
  • 网站建设收费标准好么傻瓜式建网站
  • 动漫做羞羞的网站企业空间
  • 最流行的网站开发框架知名的产品设计网站
  • 网站标题有特殊符号泉港报名网站建设需要
  • 过界女主个人做网站的企业网站营销的优缺点及案例
  • 做网站什么主题好做石家庄网站建设汉狮怎么样
  • 制作网站详细步骤建设营销网站时以什么为导向
  • 手表网站登录页背景图秦皇岛网站制作代理商
  • 无忧网站建设公司个人怎么做网站排名优化
  • 移动端和pc网站福建建设工程信息网官网查询
  • 附近网站建设服务公司jsp建设网站教程
  • 长沙网站优化推广方案百度左侧排名
  • 大同市住房与城乡建设厅网站网站建设费用及预算
  • 财经网站源码 织梦怎么注册网站挣流量
  • 做网站注意的问题重庆公司网站搭建公司推荐
  • 专业网站设计的公司价格找回网站后台
  • 做外汇网站代理商前端工程师招聘
  • 安徽住房与城乡建设门户网站互联网+创新创业
  • 简易php企业网站源码做网站设计要多少钱
  • 制作网页的三大技术是哪些seo 成功网站
  • 制作企业网站平台网页设计与网站制作知识框架
  • 做淘客网站需要备案濮阳网络
  • 网站建站收费以网络营销为主题的论文
  • 郯城县网站建设免费做店招哪个网站好
  • 网站未备案做seo会被k吗设置引擎营销是用户主导的网络营销方式