va_copy
#include <stdio.h>
#include <stdarg.h> void func(char* format, va_list ptr);
void print(char* format,...); void print(char* format,...)
{
va_list ptr;
va_list ptr_tmp;
va_start(ptr, format); va_copy(ptr_tmp,ptr); printf("print ptr: %p,%p\n",format, ptr); vfprintf(stdout, format, ptr);
vfprintf(stdout, format, ptr);
//vfprintf(stdout, format, ptr_tmp); va_end(ptr);
} int main()
{
int i=,j=;
char a[]="hello world";
print("aaaaasdfas"
"%d,%d,%s\n",i,j,a);
return ;
}
在print函数中,调用了两次vfprintf,在使用第二个vfprintf时出现:Segmentation fault
先看va_list的结构,在我的关于va_list问题博客中已经说明,http://www.cnblogs.com/chuanyang/p/5533927.html
发生段错误的原因是fp_offset和gp_offset发生了改变,如下图,所以使用va_copy,再调用一次vfprintf(stdout, format, ptr_tmp);就没有产生错误,因为能力有限,具体的原理还不是很清楚,希望帮助你理解

va_copy的更多相关文章
- 【转载】va_list 可变参数 简介 va_copy vprintf
[说明]本文转载自 smart 的文章 http://blog.sina.com.cn/s/blog_590be5290100qhxr.html 及百度百科 va_list是一个宏,由va_star ...
- va_start、va_arg、va_end、va_copy 可变参函数
1.应用与原理 在C语言中,有时我们无法给出一个函数参数的列表,比如: int printf(const char *format, ...); int fprintf(FILE *s ...
- xmpp
xmpp学习 下载: Openfire 服务器:Openfire 4.0.2 客户端:Spark 2.7.7 安装 Openfire安装: 根据提示一直下一步,服务器域名设置为:localhost(p ...
- variadic function 的使用
最近在看<the c programming language> K&R 7.3章 Variable-length Argument Lists 变长参数列表, 笔记一下用法 1 ...
- [ASM C/C++] C语言函数的可选性自变量
函数的可选性自变量 C语言允许定义自变量数量可变的函数,称为variadic函数.variadic函数需要固定数目的强制性自变量,后面是数量可变的可选性自变量. 也就是说必须至少有一个强制性 ...
- #include <stdarg.h>
名称描述相容 // 作用描述 va_start使va_list指向起始的参数 va_arg检索参数C89 va_end释放va_list va_copy拷贝va_list的内容 实例解析: #inc ...
- botbrew下写glib2程序
作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 ...
- C语言之函数可变参数
先上一段代码: #include<cstdarg> #include<iostream> #include<string> using namespace std; ...
- va_list深究
va_list深究 2011-04-21 21:06:11| 分类: C/C++|字号 订阅 VA函数(variable argument function),参数个数可变函数,又称可变参数 ...
随机推荐
- 作业八:团队项目——Alpha阶段项目总结
1.项目的预期目标 最初的项目计划实现一款类似微信飞机大战这样的一款模拟飞行游戏,中途也没有变动. 2.目前项目实现的功能. 击落飞机并计分. 3.下阶段我们可以增加游戏更多的功能,以及增加网络在线对 ...
- C#常用操作类库五(电脑操作类)
/// <summary> /// Computer Information /// </summary> public class ComputerHelper { publ ...
- web页面放到手机页面,缩放问题
有时候写页面样式不规范,很多页面元素写死尺寸时,web页面尺寸比较大放到移动端访问时,就背缩放了,div或者按钮变得好小 可以加段js,效果会好点 <script> ! function( ...
- 《看板与Scrum》读书笔记
看板的朴素思想:在制品(work-in-progress, WIP)必须被限制 WIP上限和拉动式生产 1. Scrum与看板简述 Scrum:组织拆分,工作拆分,开发时间拆分,优化发布计划,过程优化 ...
- hash连接
简单回顾嵌套循环: 两个表关联,较小的表(指使用了过滤条件后结果集较小的表)称为驱动表或者外表(,另一个称为内表.在嵌套连接过程中,oracle首先读取驱动表的第一条数据,然后和内表进行比对,所以匹配 ...
- python 中locals() 和 globals()
1.locals() 和 globals() 是python 的内建函数,他们提供了字典的形式访问局部变量和全局变量的方式. 示例代码: def test(arg): a=1 b=2 data_dic ...
- 前后台数据交互 后台封装数据 json格式
namespace ~.sverIterface { public class EventPlayerInfo { public string name { get; set; } public st ...
- 记一些之前忘记积累的问题(fiddler 学习、XP系统不能上网、XP不能装fiddler、注册表快速找到)
记一些之前忘记积累的问题: fiddler学习:http://www.cnblogs.com/kingwolf_JavaScript/archive/2012/11/07/FiddlerUI.html ...
- include/asm/dma.h
/* $Id: dma.h,v 1.7 1992/12/14 00:29:34 root Exp root $ * linux/include/asm/dma.h: Defines for using ...
- null和undefined区别(转)
目前,null和undefined基本是同义的,只有一些细微的差别. null表示"没有对象",即该处不应该有值.典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. ...