我似乎无法弄清楚如何检索传递给具有可变数量参数的函数的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”。
我需要更改代码才能到达那里?
任何帮助表示赞赏! ...
答案 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
会更有效。