关于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]将为argument1argv[2]将为argument2等。

在你的程序中,你应该假设argv[]的内容可以是任何大小。 如果要将它们限制为特定大小,则应检查它们是否大于该大小。

它可能取决于您用于启动程序的机制。 如果它是通过shell( bash或其他),你必须查找它是否施加限制。

如果你通过execv或类似的东西启动你的程序,它们应该只受到与任何数组和字符串相同的限制,并且,正如有人指出的那样,因为argc由于历史原因是int ,而不是size_tint的有限大小。