V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
punkdead
V2EX  ›  C

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

  •  
  •   punkdead · 2023-02-18 15:07:15 +08:00 · 1168 次点击
    这是一个创建于 405 天前的主题,其中的信息可能已经有所发展或是发生改变。

    #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

    3 条回复    2023-02-18 19:42:27 +08:00
    xuc
        1
    xuc  
       2023-02-18 15:20:46 +08:00
    HandleVarargs(int arg_count, ...)

    arg_count 用于指示传入的可变参数的数量。
    em70
        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
    这样就能正确输出您想要的结果了。
    punkdead
        3
    punkdead  
    OP
       2023-02-18 19:42:27 +08:00
    @em70 我擦 这 chatgpt 也太强了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2861 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:59 · PVG 20:59 · LAX 05:59 · JFK 08:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.