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++ 中?