C语言main函数的使用方法
C语言main函数里的参数使用方法
在学C语言的时候,我们也许常常见到int main(int argc,char* argv[])的写法,但是不知道这个argc和argv[]是干什么的,书上也没有讲到。接下来我们来学习一下这两个参数的使用。
main()函数是C语言控制台应用程序的入口函数,就是程序启动时运行的第一个函数,既然是函数,就可以带参数,也可以不带。我们学C语言的时候,书上的例子都是不带参数的main函数,有关参数的输入都是在程序启动后,用其他函数来执行的。比如求两个数的最大值,一般的写法是:
int max(int a,int b)
{if(a>=b)return a;
else return b;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("the max num is:%d",max(a,b));
return 0;
}
这样在程序启动之后,再输入两个数,然后输出最大值。
然而控制台应用程序以前都是在CMD或DOS命令行下进行调用的,在调用这个程序的时候,人们想直接在程序名后面跟上要输入的参数,这样程序一运行就能输出结果,而不需要在程序启动后再输入各参数,所以需要用到带参数的main函数
main函数里的形参是固定的格式,系统给我们规定好了,就是main(int argc,char* agrv[])两个形参,argc这个形参是用来记录程序启动时就传入的实参个数,argv[]这个形参是字符指针数组,用来记录每个实参的地址的。
例如:(程序名称为)
scanf返回值被忽略是怎么回事在VC++6.0或VS里运行一下,结果如下:
因为它是直接就运行了,没有在程序名后跟上参数,所以argc为1,就是程序本身的名称(包含路径)。argv[0]就指向程序名这个字符串。
在CMD命令行里先cd到该程序所在的目录,然后调用它,在程序名后跟上几个参数,然后回车。结果如下:
参数有3个,但显示的是4,因为程序名也算一个,所以一共是4,argc就等于4,argv[]就有4个指针元素,分别指向每个参数。
这时候每个参数都是以字符串的形式传入的,如果要想得到数值型参数,须进行类型转换。
itoa()将整型值转换为字符串
例:int num=33;
    char star[10];
    itoa(num,str,10);
  vs2015及以上使用_itoa_s(num,str,10);
atoi()将字符串转换成数字
例:char * str="1234";
    int num=atoi(str);
  vs2015也用atoi()
现在会用了吧!
main函数返回值的使用
既然main()是一个函数,那么它的返回值肯定也是能利用的。普通函数的返回值是给同一个程序的其他过程或函数使用的,而main()函数返回一个值之后程序就结束了,那么这个值给谁用呢?
当然是给别的程序用了。
一个程序里可以用system()函数(在stdlib.h中)来调用其他的程序,该函数的返回值就是被调用程序的main函数的返回值。
比如上面例子的程序,我想在另一个程序里调用它,并获得它的返回值0(如果system函数的返回值与程序的返回值相同,说明程序是正常退出的。如果不是正常退出或调用的程序无法运行,那么system函数的返回值是1)
我们再写一个程序(名为),用来调用
以上代码的system(" a b c d")相当于在CMD命令行中输入 a b c d
我们来运行一下:
因为没写上的绝对地址,所以系统不到,方法有两个,一是把放到所在的目录下,二是写上被调用程序的绝对路径。
我们先把复制一份到同级目录下,再运行一次,按理说是没毛病的,但还是出现如上图所示的问题,因为VC或VS这个开发环境是忽略的绝对地址的,所以也就不到了。在CMD里运行是可以正常运行的:
或者在Debug目录下双击也是可以的,(要在原代码中加入system("pause"),这样直接双击时,界面才会暂停,我们才能看到运行结果)
另一种方法是在system()里写绝对路径,这样系统就能到了。
t=system("D:\\myprospace\\vc++6.0\\test\\Debug\\ a b c d");
在调试程序时写绝对路径是最好的,但要发布程序时,肯定是要写相对路径的,因为我们不
知道用户会把这个程序安装在哪个磁盘里(路径就会改变)
OK了,以上就是关于main()函数的相关知识。希望对你有帮助。
李茂福
2018.03.16