【问题标题】:Command line arguments in CC中的命令行参数
【发布时间】:2025-06-10 05:15:02
【问题描述】:

我让这个程序使用命令行给出的值 10,20,30 执行。

int main(int argc , char **argv)
 { 
  printf("\n Printing the arguments of a program \n");
  printf("\n The total number of arguments in the program is %d",argc);
   while(argc>=0)
    { 
     printf("%s   ",argv[argc]);
     argc--;
     }
     return 0;
  }    

输出是 程序中的参数总数为 4(null) 30 20 10 ./a.out

那个(null)是从哪里来的??

【问题讨论】:

    标签: c


    【解决方案1】:

    argv[0] (尽可能)应该是标识正在运行的程序的东西。 argv[1]argv[argc-1] 是在命令行中实际输入的参数。 argv[argc] 必须是空指针 (§5.1.2.2.1/2)。

    【讨论】:

      【解决方案2】:

      argcargv数组中元素的总数;它们的编号从0argc - 1。您正在打印五个值,只有最后四个是有效的。

      【讨论】:

      • 嗯,最后一个是有效的指针(argv[argc] 保证是NULL),但不是有效的字符串。
      【解决方案3】:

      他们在学校教你数数的方法在 C 中行不通。在 C 中,我们数 0、1、2、...

      【讨论】:

      • 现在我在想象芝麻街上的伯爵拿起一个苹果说:“Zee-ro!Zee-ro-th 苹果,啊哈哈!”
      【解决方案4】:

      因为你打印的是 argv[4], argv[3], argv[2], argv[1], argv[0],而不是 argv[3], argv[2], argv[1] , argv[0].

      基本上你有一个错误。

      【讨论】:

        【解决方案5】:

        argc 将有许多可以从argv[0] to argv[argc-1] 访问的元素。 因此,相应地修改您的条件,即从 argv[argc-1] 打印。

        Here 是一个命令行参数教程链接,因为您在阅读它时可能遗漏了许多内容。因此,您无法理解该输出的原因。

        由于多种原因,索引的编号通常从 0 开始。 请检查这个问题,这将帮助您理解为什么它基于零。 https://*.com/questions/393462?tab=votes&page=1#tab-top

        【讨论】:

          【解决方案6】:

          我认为代码为while(argc >= 0) 的事实表明您知道数组是零索引的。问题是你从 argc 而不是 argc-1 开始。

          或者,换一种说法,你似乎明白 argv[0] 是程序的名称,argc 将其作为参数包含在内,所以当它说 argc = 4 时,这意味着除了程序名称...

          而且,正如 Jerry Coffin 指出的那样,C 要求 argv[argc] 为 NULL,作为哨兵,以防知道参数是 1 - argc-1 还不够......(腰带和吊带)

          【讨论】: