当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 va_copy用法及代码示例


C语言stdarg头文件(stdarg.h)中va_copy宏的用法及代码示例。

用法:

void va_copy (va_list dest, va_list src);
复制变量参数列表
初始化dest作为...的副本src(处于当前状态)。

要从中提取的下一个参数dest与将从中提取的内容相同src

调用的函数va_copy,还应调用va_enddest在它返回之前。

参数

dest
类型的未初始化对象va_list
调用之后,它将携带检索与以下参数相同的附加参数所需的信息:src
如果dest已经作为第一个参数传递给上一个调用va_start或者va_copy,它应该传递给va_end在调用此函数之前。
src
类型的对象va_list已经带有信息以检索其他参数va_arg(即,它已作为第一个参数传递给va_start或者va_copyans尚未与发布va_end)。

返回值



示例

/* va_copy example */
#include <stdio.h>      /* printf, vprintf*/
#include <stdlib.h>     /* malloc */
#include <string.h>     /* strlen, strcat */
#include <stdarg.h>     /* va_list, va_start, va_copy, va_arg, va_end */

/* print ints until a zero is found: */
void PrintInts (int first,...)
{
  char * buffer;
  const char * format = "[%d] ";
  int count = 0;
  int val = first;
  va_list vl,vl_count;
  va_start(vl,first);
  
  /* count number of arguments: */
  va_copy(vl_count,vl);
  while (val != 0) {
    val=va_arg(vl_count,int);
    ++count;
  }
  va_end(vl_count);
  
  /* allocate storage for format string: */
  buffer = (char*) malloc (strlen(format)*count+1);
  buffer[0]='\0';
  
  /* generate format string: */
  for (;count>0;--count) {
    strcat (buffer,format);
  }
  
  /* print integers: */
  printf (format,first);
  vprintf (buffer,vl);
  
  va_end(vl);
}

int main ()
{
  PrintInts (10,20,30,40,50,0);
  return 0;
}


输出:
[10] [20] [30] [40] [50] [0]

相关用法


注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C va_copy function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。