以前不在意的C语言main函数

     前两天无意中看到一道关于C语言中main函数的题目,自己当时是不会的,因为当初自己在学C时没有多在意main函数里面的参数是怎么样的,是有什么用的。

    题目是这样的:

           假定可执行程序文件名字为pro,则运行命令:pro hello world 后的输出为______.

           #include<stdio.h>
           int main(int argc,char* argv[]){

                 printf("%s#%s#",argv[0],argv[argc-1]);

                 return 0;
           }

后来自己在命令行中运行之后才知道结果为:pro#world#

这是为什么呢?原来main函数中是有两个参数的,平时因为main函数都是直接就用的,所以没有去管那么多(这是用多了编译器都会出现的毛病)结果我去查了书(一般的C语言书还真没有这个)。

其实main函数还可以是带参数的,格式为int main(int argc,char* argv[])或int main(int argc,char** argv)

第一个参数argc是int型的,它用来存放命令行参数的个数。实际上argc所存放的数值比命令行参数的个数多1,这是因为系统默认将命令字(可执行文件名)作为第一个参数,存放在argv[0]的位置处。 
第二个参数argv是一个一维的一级指针数组,它是用来存放命令行中各个参数和命令字的字符串的,并且规定: 
       argv[0]存放命令字,也就是可执行的文件名
       argv[1]存放命令行中第一个参数 
       argv[2]存放命令行中第二个参数 
       …
题目例子:
假设程序的名称为pro,当只输入pro时,由操作系统传来的参数为:argc=1,表示只有一程序名称,argv[0]指向输入的程序路径及名称;当输入prog hello时:argc=2,表示出了程序名外还有一个参数,argv[0]指向输入的程序路径及名称,argv[1]指向参数hello字符串。

要是照上面的程序直接在编译器(Turbo C,CodeBlocks,VC++,……)上运行的话,由于没有参数的传入,所以输出就直接是程序所在的地址目录了。

---------------------------------------------------- 分割线 -----------------------------------------------------

以上内容编辑于 2015年05月22日 23:42:19 ,由于放在草稿箱太久,现在把重新出来发布。


猜你喜欢

转载自blog.csdn.net/u014306011/article/details/45922741