在需要进行输入参数传递的函数中,我们经常可以见到int main(int argc ,char *argv[ ])这样的表达形式,argc ,argv这两个参数是什么呢?是系统的默认参数吗?查了一下资料,才终于搞懂这两个参数,实际上其使用也是很简单明了的。
argc与argv,是unix与linux中的标准写法,在用命令行编译程序的时候有效。
其中argc是int类型,用来统计你输入的,给main函数的命令行参数的个数;argv是字符串数组,用来存放指向输入的字符串参数的指数指针,每一个数组元素指向一个输入参数。
通过几句简单代码实验,便是一眼看穿这两个参数的作用了:
int main(int argc, char *argv[])
{
int i;
if (argv)
{
for (i = 0; argv[i]; i++)
{
printf("argv[%d] = %s!\n", i,argv[i]);
}
}
}
运行后输出的结果是:
argv[0]保存的是执行文件命令,因此可以看出argv保存的是你输入的所有参数,并不是只限于传给main函数的参数。
argc、argv最常用,也是最简单的场景是在用linux命令行创建新文件的时候,具体代码如下所示:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
void create_file(char *filename)
{
/*创建的文件具有可读写的属性*/
if (create(filename, 0666) < 0)
{
printf("create file %s failure\n", filename);
exit(EXIT_FAILURE);
}
else
{
printf("create file %s success\n", filename);
}
int main(int argc, char *argv[])
{
/*若是传入的参数小于两个,则说明没有输入文件名,创建失败*/
if (argc < 2)
{
perror("you haven't input the filename.please try again!\n");
exit(EXIT_FAILURE);
}
/*以传入的第二个参数为文件名,创建新文件*/
create_file(argv[1]);
exit(EXIT_SUCCESS);
}
}
用argv传递创建文件的名称,用argc进行输入参数数量的记录。