我能否将main函数中的argv参数传递给execv函数?

5
execv()函数期望一个以NULL结尾的字符串数组,但不需要参数数量。它使用哨兵值(NULL指针)来确定数组结束的位置。

execv()的手册中写道...

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

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

我想把main()中的argv传递给execv()

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

如果我可以确定,这个在哪里有记录呢?

谢谢, ~Eric

1个回答

9

是的,argv数组总是以NULL结尾。

C99标准草案指出:

如果声明了main函数的参数,则此函数的参数应遵守以下限制:

  • argc的值必须为非负数。
  • argv[argc]必须是一个空指针。

3
你能为这个提供一个来源吗? - Ernest Friedman-Hill
5
根据标准第5.1.2.2.1节(例如http://c0x.coding-guidelines.com/5.1.2.2.1.html),请参阅。 - Adriano Repetti
1
@cdarke 不,它们更微妙,它们会在将来的某一天让你的程序崩溃,而你可能正在洗手间... - Adriano Repetti
作为编译器,确保与规范一致是它的职责。传递参数给可执行文件的方式在不同操作系统上可能会有所不同 - 实际上也确实如此。 - Adriano Repetti
@ErnestFriedman-Hill,我添加了C99标准的引用,我敢猜测这种语言没有改变(因为这不是一个新的要求)。 - unwind
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接