读书人

为啥函数main(int argc,char* argv[])

发布时间: 2013-10-18 20:53:13 作者: rapoo

为什么函数main(int argc,char* argv[]) 只需输入一个参数就行了?
int main(int argc,char* argv[])
{
如上函数,有两个入参,可是我在用的时候
只要 a.exe xxx.dbf就行了,也就是只输入了一个参数,表示argv[0]
int argc难道不需要提供参数指吗?
[解决办法]
你输入a.exe xxx.dbf的话,那么:
argv[0] = "a.exe"
argv[1] = "xxx.dbf"
而argc=2表示总共有2个参数。


引用:
int main(int argc,char* argv[])
{
如上函数,有两个入参,可是我在用的时候
只要 a.exe xxx.dbf就行了,也就是只输入了一个参数,表示argv[0]
int argc难道不需要提供参数指吗?

[解决办法]
引用:
Quote: 引用:

你输入a.exe xxx.dbf的话,那么:
argv[0] = "a.exe"
argv[1] = "xxx.dbf"
而argc=2表示总共有2个参数。

谢谢,这就是我不理解的地方
argc本身也是一个参数啊,为什么会自动计算argv[]的个数,而且argc还不需要提供入参值?

输入的数据在命令行参数区存放
argc,argv 是C 语言调用main 函数使用的参数
用argc 表示参数个数argv是个指针数组,是调用main之前,分配的内存,把命令行参数的地址,存入该数组。
然后作为实参调用 main函数 ,main函数内部的argc,argv 是形参,不是实参,也不是命令行参数本身。
argv[i] ,可能是命令行参数(字符串指针),也可能只是命令行参数的一个拷贝。

这个调用是这样的
//int argc = getCmdLine(argv);
push argv
push argc
call _main



[解决办法]
操作系统的SHELL会自动处理的,然后传递给应用程序的main函数。

引用:
Quote: 引用:

你输入a.exe xxx.dbf的话,那么:
argv[0] = "a.exe"
argv[1] = "xxx.dbf"
而argc=2表示总共有2个参数。

谢谢,这就是我不理解的地方
argc本身也是一个参数啊,为什么会自动计算argv[]的个数,而且argc还不需要提供入参值?

[解决办法]
main比较特殊一点。

引用:
Quote: 引用:

你输入的内容不是给main函数处理,而是给操作系统shell处理
操作系统把你输入的整条字符串拆分成一个个词,再把词数和指针传给main函数

谢谢,这种做法很特殊啊,我还是第一次听说函数的某个参数,是用来自动结算参数个数的

读书人网 >C++

热点推荐