我们在C中传递给main()
的参数数量是否有限制?众所周知,它被定义为int main(int argc, char *argv[])
。
当我调用程序时,我可以传递这样的参数:
$ prog.exe arg1 arg2 arg3.....argn
我们可能以这种方式提供给main()
的参数数量是否有上限?
答案 0 :(得分:15)
根据exec
的POSIX规范,<limits.h>
中定义了一个宏ARG_MAX
,它定义了参数+环境变量的最大字节数。
但由于C没有对此进行任何定义,否则,没有固有的跨平台限制。如果没有定义该宏,则必须查阅操作系统手册。
答案 1 :(得分:13)
不,ISO C99标准没有限制。如果您使用的是“祝福”main
表单(其中有两个):
int main (int argc, char *argv[]);
然后您将被限制为有符号整数的最大大小(取决于实现,但保证至少为2 15 -1或32,767)。
当然,你甚至可以更多,因为标准特别允许非祝福main
表格(例如,一个以long
作为计数)。
标准要求如何存储参数以及argv[argc]
之类的必须为NULL,但不直接限制数量。
当然,实践中会有一个限制,但这完全取决于实施和环境。但是,如果你不得不问,那么你可能正在做something wrong。
大多数工具会将大量参数放入响应文件(比如args.txt
),然后传递一个参数,如:
my_prog @args.txt
绕过参数数量和大小的任意限制。
答案 2 :(得分:1)
我不这么认为。虽然可能没有理论上的限制,但计算机可能无法处理150万个参数。你需要知道这个有什么特别的原因吗?我不建议将命令行参数用于除选项,文件参数等之外的其他内容......
答案 3 :(得分:0)
C本身没有明确的限制。这是未在语言中定义的行为的示例,而是实现。请记住,语言本身与其实现,后续库,IDE等不同。