#include <stdio.h> #include <stdarg.h>
void HandleVarargs(int arg_count, ...) { // 用于获取变长参数 va_list args; // 开始遍历 va_start(args, arg_count); int j; for ( j = 0; j < arg_count; ++j) { // 取出对应参数 int arg = va_arg(args, int); printf("%d: %d \n", j, arg); } // 结束遍历 va_end(args); }
int main() { HandleVarargs(1,2,5,6); return 0; }
执行结构 我以为应该是 分成 4 行 打印 1256 的
结果打印了以后 ,就只有一行了
0: 2
1
xuc 2023-02-18 15:20:46 +08:00
HandleVarargs(int arg_count, ...)
arg_count 用于指示传入的可变参数的数量。 |
2
em70 2023-02-18 15:28:39 +08:00
原文贴过去,下面是 chatgpt 的回答:
您的代码存在两个问题: 函数调用时,您传入的参数与函数定义时的参数不一致。 在函数调用中,您传入了四个参数( 1, 2, 5, 6 ),但是在函数定义中,只有一个参数 arg_count ,您需要修改函数定义为接收多个参数。例如,将函数定义修改为如下形式: void HandleVarargs(int arg_count, ...) { // ... } 您在循环中使用了错误的循环条件。 在 for 循环中,您使用了错误的循环条件。您应该将循环条件修改为 arg_count ,而不是固定的值 4 。例如,将循环条件修改为如下形式: for (j = 0; j < arg_count; ++j) { // ... } 综上所述,修改后的代码如下: #include <stdio.h> #include <stdarg.h> void HandleVarargs(int arg_count, ...) { va_list args; va_start(args, arg_count); int j; for (j = 0; j < arg_count; ++j) { int arg = va_arg(args, int); printf("%d: %d \n", j, arg); } va_end(args); } int main() { HandleVarargs(4, 1, 2, 5, 6); return 0; } 输出结果为: 0: 1 1: 2 2: 5 3: 6 这样就能正确输出您想要的结果了。 |