您的位置:首页 > 大数据 > 人工智能

int main(int argc,char* argv[])浅析

2016-05-13 12:30 459 查看
我刚接触到这两个变量时,根本不知道它们是用来做什么的,我想很多人也跟我一样,刚看到这两个变量时也是稀里糊涂的。

其实: int main(int argc,char *argv[]) 是 UNIX 和 Linux 中的标准写法,而 int main() 只是 UNIX 及 Linux 默许的用法。

我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数

可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。

因此,main函数的函数头可写为: main (int argc,char *argv[])

 由于main函数不能被其它函数调用, 因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。在Linux
C中当我们要运行一个可执行文件时,在命令行键入./可执行文件名,再输入实际参数即可把这些实参传送到main的形参中去。

Linux命令行的一般形式为: ./可执行文件名 参数 参数……; 但是应该特别注意的是,main 的两个形参和命令行中的参数在位置上不是一一对应的。因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。argc参数表示了命令行中参数的个数(注意:可执行文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。例如有命令行为:./a.out
num ptr str
由于文件名a.out本身也算一个参数,所以共有4个参数,因此argc取得的值为4。argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址(即argv[0] = num,argv[1] = ptr,argv[2] = str)。 指针数组的长度即为参数个数。

那究竟 argc,argv[] 有何之用呢?下面看个例子 test.c 就会明白它们的用法了:

#include<stdio.h>

int main(int argc, char *argv[])

{

int i;

for(i = 0;i < argc;i ++)

{


printf("argc
= %d\n",argc);

printf("argv[%d] = %s\n",i,argv[i]);

}

return 0;

}


编译该程序:gcc -o test test.c

运行:./test num ptr str

结果:argc = 4

argv[0] = ./test

argv[1] = num

argv[2] = ptr

argv[3] = str

运行:./test

结果:argc = 1

argv[0]
= ./test

看到这里 argc,argv[] 如何用就很明白了,argc 是外部命令参数的个数,argv[] 存放各参数的内容,如上例:执行 ./test 时,argc 为1,

argv[0] 为 ./test .而执行 ./test num ptr str 时,argc 的值为 4,

argv[0] 为 ./test,argv[1] 为 num,argv[2] = ptr,argv[2] = str。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: