【问题标题】:What are the arguments to main() for?main() 的参数是什么?
【发布时间】:2011-04-13 15:26:14
【问题描述】:

每次我使用 Xcode 创建项目(标准命令行实用程序)时,我的 main 函数开始看起来像这样:

int main(int argc, const char * argv[])

括号中的内容是什么?为什么使用这个而不是仅仅 int main()?

【问题讨论】:

  • 标准 C 识别 int main(int argc, char *argv[])(或等效或 int main(void))但不是您的带有 argv 的版本,使用 const 修改(这是您的实现提供的扩展)。如果您希望您的代码可移植到其他实现,请删除 const
  • @pmg: 或者,由于 OP 不知道 argcargv 是什么,只需将它们替换为 void
  • 这能回答你的问题吗? What does int argc, char *argv[] mean?

标签: c arguments


【解决方案1】:

main() 是一个实际上最多可以带三个参数或不带参数的函数。 main()可以取的参数如下:-

1) int argc :它保存程序执行期间传递的参数数量(从命令提示符处),或者您可以说它用于跟踪程序执行期间传递的变量数量。它不能保持负值。例如。如果您传递可执行文件“./a.out”,那么它将被视为参数,因此 argc 值将为 0,即传递 1 个值。

2) char *argv[] : 它是一个字符指针数组,它保存在程序执行期间从命令提示符传递的字符串(字符数组)的地址。例如。在上面的示例中,如果您在 cout 中编写了 argv[argc] 即 argv[0] 那么它将给出 ./a.out 作为输出。

3) char*e​​nvp[] : 它也是一个字符指针数组,用于保存程序中使用的环境变量的地址。环境变量是一组动态命名值,可以影响正在运行的进程在计算机上的行为方式。例如,正在运行的进程想要存储临时文件,然后它将调用 TEMP 环境变量以获取合适的位置。

【讨论】:

    【解决方案2】:

    尽管标准未涵盖,但在 Windows 以及大多数 Unix 和 Linux 版本中,main 最多可以有三个参数:

    int main(int argc, char *argv[], char *envp[])
    

    最后一个类似于argv(这是一个字符串数组,如其他答案中所述,指定在命令行上传递的程序的参数。)

    但它包含环境变量,例如PATH 或您在 OS shell 中设置的任何其他内容。它以 null 结尾,因此无需提供 count 参数。

    【讨论】:

    • envp 也许是您的实现的扩展:标准没有描述它(C89C99
    • @pmg - 修正了答案,删除了不正确的标准参考。
    • "Mac OS X 和 Darwin 的第四个参数包含操作系统提供的任意信息,例如执行二进制文件的路径:int main(int argc, char **argv, char **envp, char **apple);" en.wikipedia.org/wiki/Main_function#C_and_C.2B.2B
    • 引用 C11 标准中的相关内容:port70.net/~nsz/c/c11/n1570.html#J.5.1
    【解决方案3】:

    这些用于传递命令行参数。

    例如:如果您想从外部将文件名传递给您的进程,那么

    myExe.exe "filename.txt"
    

    命令行“filename.txt”将存储在argv[]中,命令行参数的个数(计数)将存储在argc中。

    【讨论】:

      【解决方案4】:

      main 在启动程序时接收参数的数量和传递给它的参数,因此您可以访问它。

      argc 包含参数的数量,argv 包含指向参数的指针。 argv[argc] 始终是 NULL 指针。参数通常包括程序名称本身。

      通常,如果您像 ./myprogram 这样运行您的程序

      • argc 为 1;
      • argv[0] 是字符串“./myprogram”
      • argv[1] 是一个 NULL 指针

      如果你像./myprogram /tmp/somefile一样运行你的程序

      • argc 为 2;
      • argv[0] 是字符串“./myprogram”
      • argv[1] 是字符串“/tmp/somefile”
      • argv[2] 是一个 NULL 指针

      【讨论】:

        【解决方案5】:

        这些用于使用命令行中的参数 -

        argc 包含参数的数量 命令行(包括程序名),argv 是 实际参数(表示为字符串)。

        【讨论】:

          猜你喜欢
          • 2012-06-02
          • 2011-08-14
          • 2011-09-24
          • 2018-10-29
          • 1970-01-01
          • 1970-01-01
          • 2010-12-13
          相关资源
          最近更新 更多