C - 从 va_arg 中检索 int 数组的值

C - Retrieving the values of an int array from va_arg

我似乎无法弄清楚如何检索传递给参数数量可变的函数的 int 数组的各个值...

函数调用如下所示(两个字符数组与问题无关):

int arr[5];

testFunc(3, charArr1, charArr2, intArr);

在 testFunc() 中,我尝试像这样检索值(对于 char 数组,它工作得很好):

va_start(ptr, cnt);
if (cnt > 1) {
    for (i=0; i < cnt; i++) {
        switch(i) {
            case 0:
                strcpy(charArr1, va_arg(ptr, char *));
                break;
            case 1:
                strcpy(charArr2, va_arg(ptr, char *));
                break;
            case 2:
                for (j=0; j<5; j++) { 
                    sprintf(buffer, "%d ", va_arg(ptr, int *));
                    strcat(message, buffer);
                }
                break;
        }
    }
}
va_end(ptr);

基本上,我想要实现的是检索 intArr 中的五个值中的每一个并将其写入 char 数组 "buffer"。然后将此(最初为空)缓冲区的内容复制(实际上连接到)到 char 数组 "message" 中。 假设 int 数组中的五个 int 值分别为 2、5、3、9、8,我将 message 输出为字符串,那么最终输出应该是“2 5 3 9 8”。

我必须更改我的代码才能到达那里?

感谢任何帮助! ...

您调用了 va_arg 5 次,而您只应调用它一次:intArr 是一个参数。

改用临时变量:

int * temp;

...

case 2:
    temp = va_arg(ptr, int*);
    for (j=0; j<5; j++) { 
        snprintf(buffer, BUFFER_SIZE, "%d ", temp[i]);

但我质疑是否需要使用 var args 函数。通常,当参数应该为空时,使用常量参数并传递 NULL 会更有效。