关于main函数的命令行参数
它看起来像int main(int argc, char *argv[]);
。 我的问题是:
1我可以在argv[]
添加多少个数组项?
2每个char *
MAX大小是多少?
你可以试试:
$ getconf ARG_MAX 2180000
http://pubs.opengroup.org/onlinepubs/007904975/basedefs/limits.h.html
ARG_MAX是exec函数的最大参数长度,包括环境数据。
也就是说,参数的数量或参数的长度没有个别限制。 仅存储所有参数和环境变量所需的总大小限制。
xargs
使用sysconf(_SC_ARG_MAX);
计算出最大命令行长度sysconf(_SC_ARG_MAX);
产生与getconf ARG_MAX
报告的值相同的值。
在Linux命令行上,参数和环境变量被放入新进程的堆栈中。 因此,进程/线程最大堆栈大小是最终上限。 特定于 Linux的限制在内核中是硬编码的 :
#define MAX_ARG_STRLEN (PAGE_SIZE * 32) #define MAX_ARG_STRINGS 0x7FFFFFFF
这些都只受你拥有多少内存(或者你的操作系统为你的程序提供多少内存)的限制。
编辑:实际上,参数的数量也受int
的大小限制。
我想你误解了这里发生了什么。 在代码中,您没有向argv []添加任何内容,并且您不必担心它们的最大大小。 当有人运行你编译的程序时,如
./javas_program argument1 argument2 argument3
然后你的主要function将被调用。 argc
将为4, argv[0]
将为./javas_program
argv[1]
将为argument1
, argv[2]
将为argument2
等。
在你的程序中,你应该假设argv[]
的内容可以是任何大小。 如果要将它们限制为特定大小,则应检查它们是否大于该大小。
它可能取决于您用于启动程序的机制。 如果它是通过shell( bash
或其他),你必须查找它是否施加限制。
如果你通过execv
或类似的东西启动你的程序,它们应该只受到与任何数组和字符串相同的限制,并且,正如有人指出的那样,因为argc
由于历史原因是int
,而不是size_t
的int
的有限大小。