20190723_C中的调用可变函数
今天联系了 C 中调用可变参函数
参考网站:https://www.runoob.com/cprogramming/c-standard-library-stdarg-h.html
代码1: 向被调用函数中传递3个int类型参数,并在被调用函数中输出
//可变参数 test 1
#include <stdio.h>
#include <stdarg.h>
#include <string.h> #pragma warning(disable:4996) void tLog(int sInfo, ...); int main()
{
int x1 = ;
int x2 = ;
int x3 = ; int sInfo = ; tLog(sInfo, x1, x2, x3); system("pause");
return ;
} void tLog(int sInfo, ...)
{
int sx1 = ;
int sx2 = ;
int sx3 = ; //step1: 申请参数列表变量
va_list sArgv; //step2: 申明最后一个传递给函数的已知的固定参数
//这里是 sInfo = 0
va_start(sArgv, sInfo); /* step3: 依次读取固定参数 sInfo 后的 参数 */
sx1 = va_arg(sArgv, int);
sx2 = va_arg(sArgv, int);
sx3 = va_arg(sArgv, int); va_end(sArgv);
printf("运行输出:[%d, %d %d %d]\n", sInfo, sx1, sx2, sx3);
} /*
运行输出:[0, 1 2 3]
*/
代码2:向被调用函数中传递3个char* 类型参数,并在被调用函数中输出
//可变参数 test 1
#include <stdio.h>
#include <stdarg.h>
#include <string.h> #pragma warning(disable:4996) void tLog2(char* sInfo, ...); int main()
{
char* str1 = "abc";
char* str2 = "xyz";
char* str3 = "yyh"; char* sInfo = "start"; tLog2(sInfo, str1, str2, str3); system("pause");
return ;
} void tLog2(char* sInfo, ...)
{
char* s1 = (char*)malloc();
char* s2 = (char*)malloc();
char* s3 = (char*)malloc(); /*
step 1,定义指向参数列表的变量 arg_ptr
申请参数列表变量
*/
va_list sArgv; /*
step 2, 将 arg_ptr 变量初始化,让他指向参数列表得起始 i
// 申明最后一个传递给函数的已知的固定参数
*/
va_start(sArgv, sInfo); /*
step 3, 依次读取固定参数 sInfo 后的 参数
*/
s1 = va_arg(sArgv, char*);
s2 = va_arg(sArgv, char*);
s3 = va_arg(sArgv, char*); /*
step 4,清理工作
*/
va_end(sArgv); printf("运行输出:[%s,%s %s %s]\n", sInfo, s1, s2, s3); } 输出结果
/*
运行输出:[start,abc xyz yyh]
*/
20190723_C中的调用可变函数的更多相关文章
- C中如何调用C++函数、类内函数 \混编\链接
在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂 ...
- C++构造函数中不能调用虚函数
在构造函数中调用虚函数,并不会产生多态的效果,就跟普通函数一样. c++ primer 第四版中497页15.4.5构造函数和析构中的虚函数讲到,如果在构造函数或析构函数中调用虚函数,则运行的是为构造 ...
- html中事件调用JavaScript函数时有return与没有return的区别
JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...
- C#中通过调用Dll函数时,执行一段时间后,就会报内存可能被破坏的错的解决办法
遇到同样的问题,已经解决的:http://blog.csdn.net/youxiazzz12/article/details/24313347
- js中被调用的函数获取调用者对象
通过event.srcElement即可.一直用了很久的传参,终于解决了.
- 09——绝不在构造和析构函数中调用virtual函数
在base class构造期间,virtual函数不是virtual函数. 构造函数.析构函数中不要调用virtual函数.
- [置顶] lua 进阶3--lua文件中调用C++函数
前面讲了一下,C++读取lua文件中的变量,包括一维表.二维表这些,这节讲一下如何在lua文件中去调用C++函数 C++代码如下 #include <stdio.h> extern &qu ...
- 【校招面试 之 C/C++】第10题 C++不在构造函数和析构函数中调用虚函数
1.不要在构造函数中调用虚函数的原因 在概念上,构造函数的工作是为对象进行初始化.在构造函数完成之前,被构造的对象被认为“未完全生成”.当创建某个派生类的对象时,如果在它的基类的构造函数中调用虚函数, ...
- VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)
转自:http://www.cnblogs.com/javaexam2/archive/2012/07/14/2632959.html ①需要一个别人写好的类CWebPage,将其对于的两个文件Web ...
随机推荐
- 简单动态字符串(SDS)
SDS 前提:在redis中,C字符串只会作为字符串字面量用在一些无须对字符串进行修改的地方,比如打印日志: redisLog(REDIS_WARNING, “Redis is ready to ex ...
- _self.$scopedSlots.default is not a function报错
问题: 当同一页面有elementUI的多个table表格时,如果用到v-if来动态展示表格,切换时出现如下报错: 原因: 是因为表格是element-ui通过循环产生的,而vue在dom重新渲染时有 ...
- redis mysql 连接池 之 golang 实现
1 mysql 连接池代码 package lib import ( "database/sql" "fmt" "strconv" &quo ...
- docker镜像命令使用
创建docker容器时使用的docker镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认的docker镜像仓库是Docker Hub公共镜像源 使用docker sear ...
- vim 的初始配置
我是一个vim爱好者,项目开发过程中,大量地使用vim作为编辑工具. 今天刚开箱了一台新的 CentOS7, 现将Vim安装后的一些基本配置作一下记录. 使用配置模板 vim安装完之后,大多数配置都是 ...
- Python之string模块(详细讲述string常见的所有方法)
相信不少学习python的程序员都接触过string模块 string模块主要包含关于字符串的处理函数 多说无益,初学python的小伙伴还不赶紧码起来 接下来将会讲到字符串的大小写.判断函数. 以及 ...
- Orecle基本概述(1)
Orecle1.什么是orecle及体系结构?* 全局数据库,指物理磁盘数据库,一个真实存在的磁盘目录.*用户: 用户在oracle里面是用来隔离数据的*表空间: 逻辑结构,不可视的,虚拟的,用户的数 ...
- Java的IO操作之关闭流
我们知道,当结束对一个流的操作时,需要调用流的close()方法对其进行释放,这将释放掉与这个流有关的所有资源,包括文件句柄.端口等.如果不关闭流,垃圾回收机制将无法识别你是否已使用完这个文件,读取的 ...
- webshell之一句话木马变形
什么是一句话木马 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. 我们如 ...
- 实验吧之【因缺思汀的绕过】(group by with rollup的注入利用)
打开页面,查看源代码,发现存在source.txt(http://ctf5.shiyanbar.com/web/pcat/source.txt),如下: <?php error_reportin ...