我可以将 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 指针终止。
...所以我的问题是....
我想将argv
从main()
传递给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 )