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