11

我们在 C 中传递的参数数量是否有限制main()?众所周知,它被定义为int main(int argc, char *argv[])

当我调用程序时,我可以像这样传递参数:

$ prog.exe arg1 arg2 arg3.....argn

我们可以通过这种方式提供的参数数量是否有上限main()

4

4 回答 4

15

根据 POSIX 规范exec,定义了一个宏ARG_MAX<limits.h>其中定义了参数 + 环境变量的最大字节数。

但是由于 C 没有对此进行任何定义,因此不存在固有的跨平台限制。如果没有定义该宏,您必须查阅您的操作系统手册。

于 2010-09-16T07:13:01.067 回答
14

不,ISO C99 标准没有限制。如果您使用的是“祝福”main形式(其中有两种):

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

那么您将被限制为有符号整数的最大大小(取决于实现,但保证至少为 2 15 -1 或 32,767)。

当然,您甚至可以拥有更多,因为该标准特别允许非祝福main形式(例如,以 along作为计数的形式)。

该标准规定了如何存储参数以及argv[argc]必须为 NULL 之类的东西,但它并不直接限制数量。

当然,在实践中会有一个限制,但这完全取决于实施和环境。但是,如果您不得不问,那么您可能做错了什么

大多数工具会将大量参数放入响应文件(例如args.txt),然后传递单个参数,例如:

my_prog @args.txt

它绕过了参数数量和大小的任意限制。

于 2010-09-16T07:28:20.530 回答
1

我不会这么认为。虽然可能没有理论上的限制,但计算机可能无法处理 150 万个参数。你有什么特别的理由需要知道这一点吗?我不建议对选项、文件参数等以外的东西使用命令行参数...

于 2010-09-16T07:07:10.407 回答
0

There is no limit explicit in C itself. This is an example of a behavior not defined in the language but rather the implementation. Remember that the language itself is different than it's implementation, subsequent libraries, IDE's, etc.

于 2010-09-16T08:19:40.103 回答