【问题标题】:can I pass argv from main to execv?我可以将 argv 从 main 传递给 execv 吗?
【发布时间】:2023-03-09 02:02:01
【问题描述】:

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

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

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

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

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

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

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

谢谢, ~埃里克

【问题讨论】:

    标签: c exec main argv setuid


    【解决方案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 不,它们更微妙,它们会让你的程序在未来某一天当你在洗手间时崩溃......
    猜你喜欢
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2011-12-14
    • 2017-08-13
    • 2014-04-11
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多