首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >argc是否会溢出?

argc是否会溢出?
EN

Stack Overflow用户
提问于 2015-01-22 03:32:06
回答 3查看 5.1K关注 0票数 75

我正在SO里闲逛,看到了this question。然后我开始想,我是否可以溢出argc。

(我wrote了一个小C程序和一个python脚本来测试它,但得到了一个MemoryError。)

谢谢!

Rationale for International Standard — Programming Languages — C§5.1.2.2.1程序启动

根据惯例,argv[argc]必须是空指针,以提供对列表末尾的冗余检查。

EN

回答 3

Stack Overflow用户

发布于 2015-01-22 03:38:00

在实践中,不能。大多数系统对argvenvp的总大小设置了相对较低的限制。从几十到几百KB的限制并不少见;有关各种OSes的限制的合理综合列表,请参阅http://www.in-ulm.de/~mascheck/various/argmax/

票数 17
EN

Stack Overflow用户

发布于 2015-01-22 23:07:18

我试过这个:

test.c:

 ⚡⚡⚡  more test.c 
#include <stdio.h>
int main(int argc, char **argv)
{
    printf("argc = %d\n", argc);
    printf("Size of argc = %d\n", sizeof(argc));
    return 0;
}

然后用了一个很大的zipfile

 ⚡⚡⚡  ls -h bigfile 
-rw-r--r-- 1 ehwas ehwas 355M Jan 22 16:54 bigfile

然后将该文件作为参数读取到测试程序:

⚡⚡⚡  ./test $(more bigfile)

结果:

5 minutes nothing happend, then everything froze

然后我尝试了一个较小的文件:

 ⚡⚡⚡  ls -h notsobigfile 
-rw-r--r-- 1 ehwas ehwas 6.7M Jan 22 17:04 notsobigfile

和:

 ⚡⚡⚡  ./test $(more notsobigfile)
bash: ./test: Argument list too long
票数 11
EN

Stack Overflow用户

发布于 2015-01-28 22:12:46

如标准所示,argvargc必须是有效值。

因此,如果运行时环境处于不能保证这一点的情况下,就不应该启动程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28075323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档