【问题标题】:C – Passing a variable amount of arguments to mainC – 将可变数量的参数传递给 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]

标签: c linux arguments main


【解决方案1】:

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

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

【讨论】:

  • 从 C90 开始,可变长度数组是非标准的,从 C99 开始是该语言的标准功能,从 C11 开始是该语言的可选功能。
  • 我使用的是 Raspberry Pi.. 如何确认我使用的 C 标准?
  • @Mwilliams03 如果您的编译器接受上述程序,您就可以了。除此之外,您可能正在使用某种 GCC,它传统上支持独立于语言标准的可变长度数组。
猜你喜欢
  • 2015-09-23
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 2015-08-22
  • 1970-01-01
相关资源
最近更新 更多