【问题标题】:What Does Input Arguments is _什么是输入参数是_
【发布时间】:2020-09-11 23:55:44
【问题描述】:

我想知道为什么没有参数的结果是 1。

int main(int argcount, char *arglist[]) {
    int i;
    printf("Number of arguments %d\n",argcount);
    printf("Arguments list:\n");
    for (int i=0;i<argcount;i++)
        printf("%s\n",arglist[i]);
    return EXIT_SUCCESS;
}

【问题讨论】:

  • 因为argv[0]总是设置程序名。
  • 最好使用argcargv。即使名称可以是任何名称,但如果您使用事实上的标准,其他人会更清楚。

标签: c command-line-arguments startup argv argc


【解决方案1】:

./a.out 是第一个参数,因此 argcount 等于 1。

【讨论】:

    【解决方案2】:

    来自 C 标准(5.1.2.2.1 程序启动。p.#2)

    ——如果argc的值大于零,则指向的字符串 argv[0] 代表程序名; argv[0][0] 应为空 如果程序名称不能从主机获得,则为字符 环境。

    因此,您的环境使用的在第一个参数中提供程序名称。

    【讨论】:

      【解决方案3】:

      来自标准(C11),特别注意粗体:

      如果它们被声明,主函数的参数应遵循以下 约束:

      • argc 的值应为非负数。
      • argv[argc] 应为空指针。
      • 如果argc的值大于零,则数组成员argv[0]通过 argv[argc-1] inclusive 应包含指向字符串的指针,这些指针是给定的 在程序启动之前由主机环境实现定义的值。这 意图是向程序提供在程序启动之前确定的信息 来自托管环境中的其他地方。如果宿主环境不能 提供带有大写和小写字母的字符串,实现 应确保以小写形式接收字符串。
      • 如果argc的值大于零,则argv[0]指向的字符串 代表程序名称; argv[0][0] 应为空字符,如果 程序名称在主机环境中不可用。如果argc 的值为 大于一,argv[1]argv[argc-1] 指向的字符串 表示程序参数。
      • argcargv 参数以及argv 数组指向的字符串应 可由程序修改,并在程序之间保留它们最后存储的值 启动和程序终止。

      换句话说,argc 包括表示程序名称的参数 - 程序的实际参数从 argv[1] 开始。根据以下记录,从程序输出中可以看出这一点,其中第一个参数是程序名称:

      pax> cat testprog.c
      #include <stdio.h>
      int main(int argc, char *argv[]) {
          printf("Argument count: %d\n", argc);
          printf("Arguments:\n");
          for (int i = 0; i < argc; i++)
              printf("   %s\n", argv[i]);
          return 0;
      }
      
      pax> gcc --std=c11 -o testprog testprog.c && ./testprog 1 2 3
      Argument count: 4
      Arguments:
         ./testprog
         1
         2
         3
      
      pax> ./testprog
      Argument count: 1
      Arguments:
         ./testprog
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        • 2016-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        相关资源
        最近更新 更多