main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

写C语言的时候main函数一般像下面这样,都能成功运行。C语言还可以直接写 main() 不加类型,C++不行。

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

下面这样带有参数的main函数看到过更多次,那 argc 和 argv 分别代表什么呢,二者不同在于 c=count,v=value,arg表示argument,也就是参数的意思(有的也用 parameter)。

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

针对 argc 进行一下输出,可以看到 argc 的值会根据命令行中参数的个数进行改变,执行程序没有参数时 argc 为1,最终 argc 的值为 参数个数+1,这也是 argc 的所代表的的含义:argument count。

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

那 argv 自然就是 argument vector 了,参数向量,我们输入的所有命令行字符串都保存在字符串数组 argv 中,C语言中 char* 表示字符串这个很简单,因此 char** 很自然的就是表示字符串数组嘛,写成 char* argv[] 也是一样滴~!这种形式可能 java中间的比较多,它就是表示指向这个数组在内存中的第一条字符串的存放地址。下面尝试打印验证。

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

 

到这里 argc 和 argv 就清楚什么作用了,这两个参数的设立也是为了 main 函数的灵活性,比如这个程序可能在运行的初期就需要用户手动输入参数传进去运行,而不是程序执行后在运行中期让用户进行输入。比如进行渗透测试的很多工具都是这种形式。

 

还是以上面的栗子,如何对传入的参数进行操作呢,比如对输入的5个数字进行求和。这里有个注意点是输入的参数是作为字符串保存在内存中的,因此求和的话需要用到 atoi() 函数:argument to int,将字符串转换成整形数字,下面 char** argv 和 char* argv[] 是一样的。

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

main函数的参数|C++main函数写法|main函数的书写规则|如何写C语言main函数

 

因此以后要使用这种形式书写 main 函数,同时注意运行 带参数的main函数的exe 程序时,要提前编译一下 exe 代码,代码改了一定要 f5 编译一下。其他语言中其实也有类似的写法,python也一样,很多python 和 C写的攻击工具都要传入参数,比如具体值或者 -a -b -h 后面带值,其实都一个道理。说到底 main 也只是个函数而已,没有什么见不得人的秘密,甚至 main 还可以调用自身达到递归,只要适时跳出即可。