【问题标题】:argv[argc] ==?argv[argc] ==?
【发布时间】:2011-04-15 22:14:27
【问题描述】:

我的教授和几个学生正在争论 argv 是否为空终止。我的朋友写了一个小程序,它打印出null,但另一个孩子说他可能只是在读空白记忆。有人可以解决这个讨论吗?

【问题讨论】:

    标签: c argv


    【解决方案1】:

    来自标准:

    5.1.2.2.1 程序启动
    ...
    -- argv[argc] 应该是一个空指针。

    所以,是的; argv 为空终止

    【讨论】:

    • 哇,我不知道。那为什么还是 argc 呢?
    • 我不知道为什么。但是它避免了遍历 argv 数组来计算参数,从而使编写一些程序变得更容易。
    • 嗯..为什么:argc:if(argc <= 3) /* not enough arguments */我觉得比if(sizeof(argv) / sizeof(argv[0]) <= 3)
    • @Jack: argv 是一个指针; argv[0] 也是一个指针。很可能sizeof(argv) / sizeof(argv[0]) 评估为1 ...无论如何,您的想法与我所说的相似(不必走到argv 数组)。
    • 不过,操作系统(对于 Linux,ELF 加载器)必须遍历 argv,因为它只在 execve() 中传递了 argv。
    【解决方案2】:

    根据标准,“argv[argc] 应为空指针”(5.1.2.2.1)。

    【讨论】:

    • 为什么以及如何成为标准?有什么想法吗?
    • @Reigel:exec 的手册页自 1979 年 (plan9.bell-labs.com/7thEdMan/v7vol1.pdf) 显示,这比标准早了很多,并且包含一个可能的提示,说明为什么会这样:“Argv可以直接在另一个 execv 中使用,因为 argv[argc] 为 0。"
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2020-11-03
    • 2013-09-08
    • 1970-01-01
    • 2013-05-27
    • 2015-03-27
    • 2013-02-02
    相关资源
    最近更新 更多