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

医疗器械网站模板济南网站建设代码

医疗器械网站模板,济南网站建设代码,玩具外贸网站,集约化网站建设相信大家都使用过C语言的库函数#xff1a;printf(%d%d, 1, 2)的吧#xff0c;使用确实很方便功能也很强大。 但是为什么它可以接受多个参数呢#xff1f; 现在我们来解析一下多参的实现原理#xff0c;网上也找了一些文章。发现解析得都不全面。并且有BUG。 先…相信大家都使用过C语言的库函数printf(%d%d, 1, 2)的吧使用确实很方便功能也很强大。 但是为什么它可以接受多个参数呢 现在我们来解析一下多参的实现原理网上也找了一些文章。发现解析得都不全面。并且有BUG。 先看如下源码 #include windows.h #include stdio.h #include winnt.hvoid MySprintf(char* szBuffer, const char* szFormat, ...) {va_list pa; // 定义一个指针va_start(pa, szFormat); // 把指针赋值为第一个参数的值vsprintf(szBuffer, szFormat, pa);// va_end(pa); // 清空 } int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) {char szBuffer[128] {0};MySprintf(szBuffer, %d%d%d, 1,2,3);return 0 ; } 首先我们函数压参顺序是重右往左对应的栈空间内存地址从高到低。 MySprintf(szBuffer, %d%d%d, 1,2,3); 这行代码分别想栈中压入3, 2, 1, 然后再是szFormat的内存空间,在是szBuffer的内存空间. 内存结构如下   熟悉函数调用的几步过程,压入参数,保存返回地址和栈顶,开辟局部变量空间. 现在保存了返回地址然后继续执行的话就是保存栈顶和开辟va_list pa所需的内存空间. va_list其实也就是char* 类型。占4个字节。继续执行后如下 看到了吗va_start(pa, szFormat); 这条语句计算出了参数的起始地址 它是如何计算出的呢我们既然知道了内存布局, 那szFormat取地址sizeof(va_list)。 说简单点也就是szFormat的内存地址 4个字节. 不就刚好偏移到第一个参数的地址处了吗 并且 以上的MySprintf函数等同于下面这种写法 void MySprintf(char* szBuffer, const char* szFormat, ...) {char* pCh NULL;pCh (char*)szFormat sizeof(pCh);vsprintf(szBuffer, szFormat, pCh);pCh NULL; } 现在,我们得到了参数的内存首地址但是还缺少信息。缺什么信息 当前地址处有几个参数每个参数什么类型占用字节数 关键的地方就在这里了。szFormat中有类型信息信息并且有类型信息的个数我们可以通过遍历字符串 找出类型信息的顺序和个数。然后根据遍历找到的信息。来解析参数的内存首地址。 具体的做法.在vsprintf中有实现,下面是拷贝vsprintf的实现代码 #ifndef _COUNT_int __cdecl vsprintf (char *string,const char *format,va_list ap) #else /* _COUNT_ */int __cdecl _vsnprintf (char *string,size_t count,const char *format,va_list ap) #endif /* _COUNT_ */{FILE str;REG1 FILE *outfile str;REG2 int retval;_ASSERTE(string ! NULL);_ASSERTE(format ! NULL);outfile-_flag _IOWRT|_IOSTRG;outfile-_ptr outfile-_base string; #ifndef _COUNT_outfile-_cnt MAXSTR; #else /* _COUNT_ */outfile-_cnt count; #endif /* _COUNT_ *//*简单说明:关键代码处大家直接跟进去即可,先是做些判断然后设置一些标志位最后把数字根据设置的标志转为字符串.*/retval _output(outfile,format,ap );_putc_lk(\0,outfile);return(retval); } 本人菜鸟水平有限望各路大牛指点!转载于:https://www.cnblogs.com/ziolo/archive/2013/04/22/3036346.html
http://wiki.neutronadmin.com/news/152549/

相关文章:

  • 本地做网站网站服务器崩溃影响
  • 网站让女友做网站模特中企动力科技股份有限公司成都分公司
  • 株洲网站定制济南企业免费建站
  • 哪个建站系统好wordpress网站360搜索收录
  • 企业网站怎么做产品图片轮播设计比例网站
  • 烟台有没有做网站银川建网站
  • 云南网站设计联系方式网站后台管理入口
  • 正规的网站建设公WordPress为什么进不去
  • 公司微信网站建设方案模板下载wordpress链接设置方法
  • 司法网站建设运营情况自己制作logo免费 生成器
  • 模板网站免费微信小程序万能开挂器
  • 企业网站导航栏高度dz做电影网站
  • wordpress多站点可视化资阳网站开发
  • 网站用什么系统好石家庄网络营销
  • 上海建筑设计公司网站手机上怎样制作网站
  • 广东深圳网站建设服务网站开发需解决的难题
  • 400电话西安网站制作 彩铃制作广州做网站信息
  • 济南手机网站开发廖珍琴建盏简介
  • 网站推广智选刺盾云下拉广安网站建设公司
  • 自己做视频的网站wordpress墨客吧
  • 终身免费vps重庆网站建设seo公司哪家好
  • 网站宽度一般是多少肇庆建设工程备案的网站
  • 网站 字号 英文广东网络推广服务
  • 门户网站创建西安官网seo
  • sql数据库做的网站怎么发布个人网站设计模板下载
  • 诸城做网站找个人手机端购物网站模板下载
  • 桐梓网站开发营销策划公司品牌
  • 网站模板怎么修改教程官网订机票
  • 成都营销型网站建设重庆装修公司避坑指南
  • 门户网站域名是什么廊坊住房和城乡建设厅网站