CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

int eprintf(const char *fmt, ...)形参中的...是什么意思啊?请教鸟

楼主Start13(adsd)2006-03-02 11:44:44 在 C/C++ / C语言 提问

int   eprintf(const   char   *fmt,   ...)  
  {  
    va_list   argp;  
   
    va_start(argp,   fmt);  
    return(_doprnt(fmt,   argp));  
  } 问题点数:20、回复次数:5Top

1 楼jinjiajie(leorio)回复于 2006-03-02 11:47:05 得分 0

就是可以有多个,根据前面的而改变的意思Top

2 楼ouyh12345(五岭散人)回复于 2006-03-02 11:47:13 得分 0

可变参数。  
  fmt确定参数插入的位置。  
  ...为参数  
  Top

3 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2006-03-02 12:52:54 得分 0

...表示实参个数不定,这是可变参数函数定义。Top

4 楼ugg(逸学堂(exuetang.net))回复于 2006-03-02 13:31:00 得分 0

 
   
  VA函数(variable   argument   function),参数个数可变函数,又称可变参数函数。C/C++编程中,系统提供给编程人员的va函数很少。*printf()/*scanf()   系列函数,用于输入输出时格式化字符串;exec*()系列函数,用于在程序中执行外部文件(main(int   argc,   char*   argv[]算不算呢,与其说main()也是一个可变参数函数,倒不如说它是exec*()经过封装后的具备特殊功能和意义的函数,至少在原理这一级上有很多相似之处)。由于参数个数的不确定,使va函数具有很大的灵活性,易用性,对没有使用过可变参数函数的编程人员很有诱惑力;那么,该如何编写自己的   va函数,va函数的运用时机、编译实现又是如何。作者借本文谈谈自己关于va函数的一些浅见。  
   
  http://www.exuetang.net/article/View.aspx?NewsID=172Top

5 楼ws_lzy(alan_luo)回复于 2006-03-02 17:54:38 得分 0

事实上这是采用堆栈传递不定参数的方法:  
  具体做法请看我写的如下代码,两个版本,一个是c++一个是汇编,  
  一切尽在程序中。<当然,当前函数只能处理%d和%s如果需要扩展,请自行处理:)>  
   
  //组装字符串函数   by   lzy  
  void   sprintf_c(char*   ptrDst,const   char*   ptrMsg,...){  
  int   index=1;  
  while(*ptrDst++=*ptrMsg++){  
  if(*(ptrDst-1)=='%'){  
  ptrDst--;  
  switch(*ptrMsg){  
  case   'd':  
  {  
  ptrMsg++;  
  char   value[32],*ptr;  
  ptr=_ltoa((*((long*)((int*)(&(ptrMsg))+index++)))++,   value,   10);  
  while(ptr   &&   *ptr   &&   (*ptrDst++=*ptr++));  
  }  
  break;  
  case   's':  
  {  
  ptrMsg++;  
  char*   ptr=(char*)((*((long*)((int*)(&(ptrMsg))+index++)))++);  
  while(ptr   &&   *ptr   &&   (*ptrDst++=*ptr++));  
  }  
  break;  
  default:  
  break;  
  }  
  }  
  }  
  }  
  //组装字符串函数   by   lzy  
  __declspec(naked)   sprintf_asm(char*   ptrDst,const   char*   ptrMsg,...)  
  {  
  __asm{  
  push   ebp  
  mov   ebp,esp  
  push   ebx  
  push   edi  
  push   esi  
  mov   edi,ptrDst  
  lea   esi,[ebp+0x10]//定位到可变参数在堆栈中的地址  
  cld  
  mov   ebx,ptrMsg  
  nloopz:  
  mov   al,byte   ptr[ebx]  
  mov   byte   ptr[edi],al  
  inc   ebx  
  inc   edi  
  cmp   al,'%'  
  jz   cmdProc  
  or   al,al  
  jz   t_exit  
  jmp   nloopz  
  cmdProc:  
  dec   edi  
  mov   al,byte   ptr[ebx]  
  cmp   al,'s'  
  jz   getParamSTR  
  cmp   al,'d'  
  jz   getParamINT  
  jmp   nloopz  
  getParamINT:  
  lodsd  
  //得到参数  
  inc   ebx  
  push   ebx  
  lea   ebx,[esp-4]  
  sub   esp,0x20  
  mov   byte   ptr[ebx],0  
  dec   ebx  
  mov   ecx,0xa  
  spret:  
  xor   edx,edx  
  div   ecx  
  add   dl,0x30  
  mov   byte   ptr[ebx],dl  
  or   eax,eax  
  jz   spretEnd  
  dec   ebx  
  jmp   spret  
  spretEnd:  
  add   esp,0x20  
  mov   eax,ebx  
  pop   ebx  
  jmp   appendStr  
  getParamSTR:  
  lodsd  
  inc   ebx  
  appendStr:  
  mov   edx,esi  
  mov   esi,eax  
  copyStr_in:  
  lodsb  
  or   al,al  
  jz   t_ret  
  stosb  
  jmp   copyStr_in  
  t_ret:  
  mov   esi,edx  
  jmp   nloopz  
  t_exit:  
  pop   esi  
  pop   edi  
  pop   ebx  
  pop   ebp  
  ret  
  }  
  }Top

相关问题

  • const char* const* const* p;
  • void myfunc( const char *fmt, ...)?这里面的参数是怎么回事?
  • operator char*() const {return ...;}
  • const char *和ansistring
  • const char * 如何变成char *?
  • const char *iceCream[]与const char iceCream[]不同
  • char const *p和char * const p区别?
  • static const char*问题
  • 请问这几个的区别const char * pstr; char* const pstr;const char* const pstr;
  • bool operator==(const char* sz); and operator const char* () const; 两句话什么意思?

关键词

  • 函数
  • ptrmsg
  • ptrdst
  • 参数
  • 可变
  • fmt
  • va
  • 字符串
  • argp
  • 个数

得分解答快速导航

  • 帖主:Start13

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo