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

时间:2018-02-05 12:44:55

标签: c variadic-functions

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

函数调用看起来像这样(两个char数组与问题无关):

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,并且我将消息作为字符串输出,那么最后输出应为“2 5 3 9 8”。

我需要更改代码才能到达那里?

任何帮助表示赞赏! ...

1 个答案:

答案 0 :(得分:4)

当您只应拨打一次时,您正在拨打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会更有效。