c++ 可变参数的使用

实例:

int DealMessageLog(char * argu, ...)
{
   va_list args;
  va_start(args,argu);

  int iBufferLen=0;
  char * pBufferHead=NULL;
  char * pTempBufferHead=NULL;
  char cBufferTemp[256]={0};
  char cBuffer[1024]={0};
  strcpy(cBufferTemp, argu);
  pBufferHead=cBuffer;
  pTempBufferHead=cBufferTemp;

  while(true)
  {
   char * p = strchr(pTempBufferHead,'%');

   if( NULL!=p )
   {
    p++;
    int iLength=(int)(p-pTempBufferHead)-1;
    if((iBufferLen+iLength)>1024)
    return -1;
    memcpy(pBufferHead,pTempBufferHead,iLength);
    pBufferHead+=iLength;
    iBufferLen+=iLength;
    pTempBufferHead+=iLength+1;
   
    if( *p!='/0')
    {
     if( *p == 'd' )
     {
      char itemp[64]={0};
      int iParam = va_arg(args,int);
      sprintf(itemp,"%d",iParam);
      int iLength=(int)strlen(itemp);
      if((iBufferLen+iLength)>1024)
      return -1;
      memcpy(pBufferHead,itemp,iLength);
      pBufferHead+=iLength;
      iBufferLen+=iLength;
     }
     else if( *p == 'f' )
     {
      char itemp[64]={0};
      double fParam = va_arg(args,double);
      sprintf(itemp,"%f",fParam);
      int iLength=(int)strlen(itemp);
      if((iBufferLen+iLength)>1024)
      return -1;
      memcpy(pBufferHead,itemp,iLength);
      pBufferHead+=iLength;
      iBufferLen+=iLength;
     }
     else
     {
      char * cPItem = va_arg(args,char *);
      int iLength=(int)strlen(cPItem);
      memcpy(pBufferHead,cPItem,iLength);
      if((iBufferLen+iLength)>1024)
      return -1;
      pBufferHead+=iLength;
      iBufferLen+=iLength;
     }
     p++;
     pTempBufferHead++;
    }

   }
   else
   {
    int iLength=(int)strlen(cBufferTemp)-(int)(pTempBufferHead-cBufferTemp);
    memcpy(pBufferHead,pTempBufferHead,iLength);
    pBufferHead+=iLength;
    break;
   }
  }

   va_end(args);
  printf("%s/n",cBuffer);


 return -1;
}

 

上述代码实现把可变参数转换成一个字符串

字符串就可以做你相应的处理;可以存成文件或打印输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

allenjiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值