Rav*_*hak 10 c language-lawyer
我们main()在C中传递的参数数量是否有限制?众所周知,它被定义为int main(int argc, char *argv[]).
当我调用程序时,我可以传递这样的参数:
$ prog.exe arg1 arg2 arg3.....argn
Run Code Online (Sandbox Code Playgroud)
我们可以通过main()这种方式提供的参数数量是否有上限?
Pot*_*ter 15
根据POSIX规范exec,ARG_MAX定义了一个宏<limits.h>,定义了参数+环境变量的最大字节数.
但由于C没有对此进行任何定义,否则,没有固有的跨平台限制.如果没有定义该宏,则必须查阅操作系统手册.
pax*_*blo 13
不,ISO C99标准没有限制.如果您使用的是"祝福" main形式(其中有两种):
int main (int argc, char *argv[]);
Run Code Online (Sandbox Code Playgroud)
然后,您将被限制为有符号整数的最大大小(取决于实现,但保证至少为2 15 -1或32,767).
当然,你甚至可以拥有更多,因为标准特别允许非祝福main形式(例如,一个long作为计数的一个).
该标准规定了如何存储参数以及argv[argc]必须为NULL的事情,但它不直接限制数量.
当然,实践中会有一个限制,但这完全取决于实施和环境.但是,如果你不得不问,那么你可能做错了.
大多数工具将使一个真正的大量的参数到一个响应文件(比如说args.txt),然后传似一个参数:
my_prog @args.txt
Run Code Online (Sandbox Code Playgroud)
它绕过参数数量和大小的任意限制.