我在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.任何理由。提前致谢
答案 0 :(得分: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]);
}
答案 1 :(得分:1)
有没有想过printf("%s",argv[0])
会做什么? C数组索引从0开始。这是你的问题的解决方案.argv [0]保存正在执行的程序名,并且是第一个参数(例如,a.out)
答案 2 :(得分:1)
实际上,argv [0]保存程序的名称,并在程序分叉时使用它。 无论何时在C中调用fork(),它都会生成一个与父进程同名的子进程,例如a.out。 Child从argv [0]获取其父级的名称。所以每件事都有正确的目的。
答案 3 :(得分:0)
这是因为argv
不包含命令行参数。它拥有完整的命令行。第一个是命令,其余是参数。