我这段 c 语言变长参数的函数 为啥结果老是不对呢

2023-02-18 15:07:15 +08:00
 punkdead

#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

1391 次点击
所在节点    C
3 条回复
xuc
2023-02-18 15:20:46 +08:00
HandleVarargs(int arg_count, ...)

arg_count 用于指示传入的可变参数的数量。
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
这样就能正确输出您想要的结果了。
punkdead
2023-02-18 19:42:27 +08:00
@em70 我擦 这 chatgpt 也太强了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/917173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX