为什么argc在C中传递给main?

时间:2015-08-24 09:15:23

标签: c

argc传递给main似乎是多余的。看一下下面的例子。

#include <stdio.h>
#include <stdlib.h>

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

  for (j = 0; j < argc; j++)
    printf("argv[%d]: %s\n", j, argv[j]);

  for (j = 0; envp[j] != NULL; j++)
    printf("envp[%d]: %s\n", j, envp[j]);

  for (j = 0; argv[j] != NULL; j++)
    printf("argv[%d]: %s\n", j, argv[j]);

  exit (EXIT_SUCCESS);
}

第一个for循环使用标准方式使用argc枚举命令行参数。

第二个循环显示如何枚举环境。环境存储在由NULL终止的指针列表中。环境中的条目数不会传递给main。

同样适用于参数列表。第三个循环显示了如何在不使用argc的情况下枚举参数。

所以问题是:为什么argc如果是多余的话会传递给main

1 个答案:

答案 0 :(得分:-1)

argc表示“参数计数”。它表示将多少个参数传递到可执行文件中。 argv的意思是“参数值”。它是指向字符数组的指针。或者以另一种方式考虑它,它是一个C字符串数组(因为C字符串只是字符数组)。

所以如果你有一个程序“foo”并执行它:

foo -bar baz -theAnswer 42

然后在main()函数中,argc为5,argv为:

argv[0] = "/full/path/to/foo";
argv[1] = "-bar";
argv[2] = "baz";
argv[3] = "-theAnswer";
argv[4] = "42";