命令行参数

类似有UNIX系统中的命令ls
可以添加命令行参数 -l 即 ls -l
还可以添加文件名 -l a.out 即 ls -l a.out
ls将会显示文件名为a.out的详细信息
在这里插入图片描述
不仅操作系统命令,所有程序都有命令行信息。为了能够访问这些命令行参数(程序参数),必须把main函数定义为含有两个参数的函数,这两个参数通常命名为argc和argv:

main(int argc,char *argv[])
{
	...
}

argc(参数计数)是命令行参数的数量(包含程序本身)。argv(”参数向量“)是指向命令行参数的指针数组,这些命令行参数以字符串的形式存储。argv[0]指向程序名,而从argv[1]到argv[argc-1]则指向余下的命令行参数。
argv有一个附加元素,即argv[argc],这个元素始终是一个空指针。空指针是一种不指向任何内容的特殊指针。目前只需要知道宏NULL代表空指针就够了。

如果用户输入了下列命令行:
ls -l a.out
那么argc将为3,argv[0]将指向含有程序名的字符串,argv[1]将指向字符串”-l" ,argv[2]将指向字符串”remind.c",而argv[3]将为空指针:
在这里插入图片描述
这幅图没有详细说明程序名,是因为在不同的操作系统种程序名可能含路径或其他信息。如果程序名不可用,argv[0]将指向空字符串。
因为argv是指针数组,所以已经知道访问命令行参数的方法了。典型做法是,期望有命令行参数的程序将会设置循环来按顺序检查每一个参数。设置这种循环的方法之一就是使用整形变量argv数组的索引。例如,下面的循环每行一条地显示命令行参数:

int i;

for(i = 1;i < argc; i++)
	printf("%s\n",argv[i]); 

另一种方法是构造一个指向argv[1]的指针,然后对指针重复进行自增操作来逐个访问数组余下的元素。因为数组的最后一个元素始终是空指针,所以循环可以在找到数组中第一个空指针时停止:

char **p;
for ( p = &arg[v]; *p != NULL; p++)
	printf("%s\n",*p);

把p设为&argv[1]是很有意义的,因为argv[1]是一个指向字符的指针,所以&argv[1]就是指向指针的指针了:因为p和NULL都是指针,所以测试*p != NULL是没有问题的;对p进行自增操作看起来也是对的因为p指向数组元素,所以对它进行自增操作将使p指向下一个元素;显示p的语句也是合理的,因为*p是一个指向字符二代指针。

Unix程序示例
在这里插入图片描述
在这里插入图片描述
输入命令planet Pluto Mars
生成入参

int argc = 3;
char argv[] = {
	"planet","Pluto","Mars"
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值