1

我用 C 语言编写了这个程序,它接受命令行参数并将其与参数计数一起显示。但是参数比输入的参数数量多一个。

#include<stdio.h>
 void main(int argc, char *argv[])
 {
 int i=0;
 for(i=0;argv[1][i]!='\0';i++)
 {
  if(argv[1][i]>='a' && argv[1][i]>='z')
  {
   argv[1][i]=argv[1][i];
  }
   }
  printf("%s",argv[1]);
  printf("\n");
  printf("%d",argc);
 }

我通过的论点:上 abracadabra 。它给了我一个计数为3。任何理由。提前致谢

4

4 回答 4

4

请记住,C 数组是从零开始的,因此有效索引运行 [0..argc]。您的程序跳过检查argv[0]

除了您指定的参数外,argv[0]还设置为您的程序名称(如果平台无法确定名称,则为 NULL)。

如果你想检查命令行参数,你可以做类似的事情

int i;
for (i=0; i<argc; i++) {
    printf("argv[%d] = %s\n", i, argv[i]);
}
于 2013-05-27T16:59:17.663 回答
1

有没有想过printf("%s",argv[0])会做什么?C 数组索引从 0 开始。这就是您问题的解决方案。argv[0] 保存正在执行的程序名称,并且是第一个参数(例如,a.out)

于 2013-05-27T17:01:46.590 回答
1

实际上 argv[0] 保存程序的名称,并在您的程序分叉一个孩子时使用它。每当您在 C 中调用 fork() 时,它都会生成一个与父进程同名的子进程,例如 a.out。子项从 argv[0] 中获取其父项的名称。所以每一件事都是有目的的。

于 2013-12-19T15:56:26.457 回答
0

这是因为argv不包含命令行参数。它拥有完整的命令行。第一个是命令,其余的是参数。

于 2013-05-27T17:00:48.260 回答