C中的命令行参数

时间:2010-07-30 13:28:29

标签: c

我使用命令行给出的值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)来自哪里?

7 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

他们教你在学校计算的方式不适用于C.在C中我们算0,1,2,......

答案 3 :(得分:2)

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

基本上你有一个错误。

答案 4 :(得分:0)

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

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

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

答案 5 :(得分:0)

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

或换句话说,你似乎明白argv [0]是程序的名称,argc包含它作为参数,因此当它表示argc = 4时,它意味着除了3之外还有3个参数程序名称......

而且,正如Jerry Coffin所指出的那样,C要求argv [argc]为NULL,作为一个传递,如果知道参数是1 - argc-1是不够的......(腰带和吊带)

答案 6 :(得分:-1)

它输出为(null)30 20 10,因为你正在使用argv [argc],当你传递10,20,30时,参数数量是4(因为第一个参数总是程序名称)所以对于argv [argc]第一次意味着argv [4]即第五个参数(因为数组以[0]开头,因此argv [0]将是第一个参数... argv 1将是第二个... ..so ..... argv [4]将是传递的第五个参数),因为它打印为(null)30 20 10。 要获得正确的结果,请使用

printf("%s   ",argv[argc-1]);

Command Line Argument in C Programming - Concept