可变参数函数

由于工作需要,最近写了一个可变参数的函数,贴在下面,以后今后参考。
  1. StringPointer
  2. StringPointer::concat(size_t nszNum, StringPointer szString, ...)
  3. {
  4.     szString;
  5.     //
  6.     //  get owned string length of this string pointer
  7.     //
  8.     register size_t nLen = 0;
  9.     if (_pCounted)
  10.     {
  11.         nLen = _pCounted->length();
  12.     }
  13.     register size_t nOffset = nLen;
  14.     va_list vaList;
  15.     StringPointer szTemp;
  16.     register size_t i = nszNum;
  17.     //
  18.     //  get the length of the new created string pointer
  19.     //
  20.     va_start(vaList, nszNum);
  21.     while (i > 0)
  22.     {
  23.         szTemp = va_arg(vaList, StringPointer);
  24.         nLen += szTemp.length();
  25.         --i;
  26.     }   
  27.     va_end(vaList);
  28.     //
  29.     //  allocate memory for the new string pointer object
  30.     //
  31.     wchar_t* zConcat = new wchar_t[nLen + 1];
  32.     if (_pCounted)
  33.     {
  34.         wcscpy(zConcat, _pCounted->value());
  35.     }
  36.     //
  37.     //  append each string in arguments list one by one
  38.     //
  39.     i = nszNum;
  40.     va_start(vaList, nszNum);
  41.     while (i > 0)
  42.     {
  43.         szTemp = va_arg(vaList, StringPointer);
  44.         wcscpy(zConcat + nOffset, szTemp.string());
  45.         nOffset += szTemp.length();
  46.         --i;
  47.     }
  48.     va_end(vaList);
  49.     //
  50.     //  create a new string pointer object
  51.     //
  52.     return StringPointer(zConcat, false);
  53. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值