C – 将可变数量的参数传递给 main

Posted

技术标签:

【中文标题】C – 将可变数量的参数传递给 main【英文标题】:C – Passing a variable amount of arguments to main 【发布时间】:2013-09-21 05:29:55 【问题描述】:

我不确定这是否是正确的方法。请参阅下面的代码。 我希望能够将参数列表传递给 main,然后将其存储在另一个数组中。

所以,我想用至少 1 个参数启动程序……或者我喜欢的尽可能多的参数。我可能会将最大参数数量设置为 32。

例如。

./foo 3

或者

./foo 3 56 12 34 56 111 2222 33

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])

    int i;
    int     numbersEntered[argc];


    if (argc <= 1)
            printf("Not enough arguments entered\n");
            exit(1);
    
    printf("Arg count  %i\n",argc-1);


    for (i=1;i<argc;i++)
            numbersEntered[i]=atoi(argv[i]);
    for (i=1;i<argc;i++)
            printf(" numbersEntered %i\n", numbersEntered[i]);

【问题讨论】:

如果你的编译器支持可变长度数组,我觉得没问题。你为什么担心这可能不是正确的方法? 写完答案让我很疑惑,你的程序已经在做你想做的事了,有什么问题吗? :-) 为什么要索引从 1 而不是 0 输入的数字?您未初始化 numbersEntered[0]。 上面的代码确实有效(在 Raspberry Pi 上)。但是,我正在努力确保我做得正确。因为我使用 argc 来指定数组 'numbersEntered[argc]' 的大小......我一直读到你必须在声明它时指定数组大小。 @Troy 因为argv[0] 只是程序名称;第一个参数是argv[1] 【参考方案1】:

已经是这样了,argv是一个指针数组,命令行上每个参数一个指针(加两个,其实第一个是程序名,然后是参数,然后是一个终止 NULL 指针)。

关于数组,问题是传统C语言需要一个在编译时就知道的大小,你不能只使用argc;也就是说,GCC 等一些编译器以及更新的 C 标准确实允许这样做。

【讨论】:

从 C90 开始,可变长度数组是非标准的,从 C99 开始是该语言的标准功能,从 C11 开始是该语言的可选功能。 我使用的是 Raspberry Pi.. 如何确认我使用的 C 标准? @Mwilliams03 如果您的编译器接受上述程序,您就可以了。除此之外,您可能正在使用某种 GCC,它传统上支持独立于语言标准的可变长度数组。

以上是关于C – 将可变数量的参数传递给 main的主要内容,如果未能解决你的问题,请参考以下文章

可以将可变数量的参数传递给函数吗?

怎么将可变参数的函数的参数传递给另一个可变参数的函数

是否可以将可变数量的参数传递给redshift中的存储过程?

在 GCC 中将 0 参数传递给可变参数宏失败,但仅在 C++ 中?

如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]

如何将带有 args 的成员函数作为参数传递给另一个成员函数?