我可以将 argv 从 main 传递给 execv 吗?

Posted

技术标签:

【中文标题】我可以将 argv 从 main 传递给 execv 吗?【英文标题】:can I pass argv from main to execv? 【发布时间】:2012-05-24 02:00:42 【问题描述】:

execv() 函数需要一个由NULL 终止的字符串组成的数组,但不接受参数的数量。它使用标记值(NULL 指针)来确定数组何时结束。

execv() 的手册页状态...

按照惯例,第一个参数应该指向文件名 与正在执行的文件相关联。指针数组必须 由 NULL 指针终止。

...所以我的问题是....

我想将argvmain() 传递给execv()

我可以确定进入 main 的 argv 会被 NULL 指针终止吗? 也就是说,我可以确定argv[argc] == NULL 还是我必须分配我自己的char* 数组,大小为argc + 1 并将NULL 放入argc 索引中?

如果我可以放心,它是否记录在某个地方?

谢谢, ~埃里克

【问题讨论】:

【参考方案1】:

是的。 argv 向量始终是 NULL 终止的。

C99 标准草案规定:

如果它们被声明,main 函数的参数应遵循以下规则 约束:

argc 的值应为非负数。 argv[argc] 应为空指针。

【讨论】:

你能引用这个来源吗? @ErnestFriedman-Hill 来自标准,第 5.1.2.2.1 节(例如参见 c0x.coding-guidelines.com/5.1.2.2.1.html 大声笑......我想将@Adriano 的评论标记为正确答案,因为我要求提供来源。什么需要符合本指南?...编译器?操作系统(本例中为 Linux),外壳? 如果我使用 execve 调用 OP 程序而不用 NULL 终止命令行向量会怎样?标准委员会会来找我吗? @cdarke 不,它们更微妙,它们会让你的程序在未来某一天当你在洗手间时崩溃......

以上是关于我可以将 argv 从 main 传递给 execv 吗?的主要内容,如果未能解决你的问题,请参考以下文章

以这种格式将 argv 变量传递给 main 的结果 main( int argc, char const * argv )

除了通过 main 的 argv 之外,还有其他方法可以将用户参数传递给程序吗?

argc 和 argv 用于除 main 以外的函数

sys.exit(main(sys.argv[1:]))

main:处理命令行选项

如何在 C 或 C++ 中包装参数并将它们传递给 system 或 exec*