<cstdarg>

va_copy

void va_copy (va_list dest, va_list src);
複製可變引數列表
dest 初始化為 src(在其當前狀態下)的副本。

dest 中提取的下一個引數與從 src 中提取的下一個引數相同。

呼叫 va_copy 的函式在返回前還應呼叫 va_end 處理 dest

引數

dest
va_list 型別的未初始化物件。
呼叫後,它攜帶的資訊與 src 一樣,用於檢索相同的額外引數。
如果 dest 已作為第一個引數傳遞給先前的 va_startva_copy 呼叫,則在呼叫此函式之前應將其傳遞給 va_end
src
va_list 型別的物件,它已經攜帶了用於透過 va_arg 檢索額外引數的資訊(即,它已作為第一個引數傳遞給 va_startva_copy,並且尚未透過 va_end 釋放)。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/* 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]


另見