繁体   English   中英

C函数变量参数长度

[英]C function variable argument length

我想将变量参数传递给函数,但不想在参数中设置数字。 所以我用0来检查参数的结尾,如下所示:

#include <stdarg.h>
#include <stdio.h>

void foo(char* str, ... )
{
    printf("str: %s\n",str);
    va_list arguments;                     
    va_start(arguments,str);
    while(1) {
        double data = va_arg(arguments,double); 
        if (data == 0) {
            break;
        }
        printf("data: %.2f\n",data);
    }
    va_end (arguments);
    return;
}

int main()
{
    foo("hello", 5.5, 4.5, 3.5);
}

但似乎输出不正确:

str: hello
data: 5.50
data: 4.50
data: 3.50
data: 34498135662005122837381407988349324615424289861359674446209831441373336786008345008385190019649501215393603210517859097842586295826918562939434091794406737728862534747430060032.00

最后的数据输出是随机值,不应存在!

您可以通过将哨兵值添加到传递的值来解决该问题。

int main()
{
    foo("hello", 5.5, 4.5, 3.5, 0.0);
}

在我的测试中,该值必须为0.0 ,而不是0

调用该函数时,不提供0.0参数。 该函数尝试将所有内容打印到最大为零的参数,但没有此类参数。

该函数将继续查看期望第5、6,...个参数的内存,直到一个这样的位置随机包含零或程序崩溃为止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM