|
最近在百度知道上看到比较多的人在询问关于主函数参数的问题,所以才打算做一个这个,希望对新手们有所帮助。 根据最新的ISO C++的规定,C++的main函数只能有这两种形式: int main() { } 或者 int main(int argc,char* argv[]) { } 实际上,在Windows环境下,这样也是能够通过编译的: void main() { } 由于Windows在个人桌面上的霸主地位,所以习惯void main的朋友并没有感到有什么样的不妥,实际上这是不符合规范的,在Linux下,这算一个错误! 平时我们普遍使用int main()就足够了,所以很少用到带参数的主函数,所以有不少的朋友对此不是很了解,所以今天就由我来给大家随便讲点吧,如果有不妥的地方,请大家指正,大家共同学习共同进步嘛! 在C++中,你可以定义没有参数的main()函数,或者是采用更好的方法--使用一个void来代替--main(void).你也可以指定主函数的参数的,通过这些参数,主函数可以获取到执行的该程序命令行。该参数一般都是字符串。如果你想要你的程序从命令行获取信息,你必须这样定义你的主函数: int main(int argc,char* argv[]) { //其它的代码 } 第一个参数是主函数从命令行所获取到的字符串的数量。第二个参数是一个数组,储存的是主函数所获取到的字符串。值得注意的是,argc的值最少都应该1,为什么呢?大家还记得DOS吗?命令提示符也行(cmd),我们要运行一个程序是否要输入它的名字呢?是的,这个数组的第一个字符串就是该程序的名字!接下来的不要忘了哦,下一个字符串就应该是NULL! 话不多说,先看看程序测试:![]() //关于主函数参数的讨论 _鈊_煩_薏亂 #include <iostream> using namespace std; int main(int argc,char* argv[]) { cout<<"argc的是:"<<argc<<endl; cout<<"下面输出的是从命令行获取到的信息:"<<endl; for(int i=0;i<argc;i++) { cout<<"argv["<<(i+1)<<"] :"<<argv[i]<<endl; } return 0; } 这程序的作用就是输出程序获取到的信息,直接在VC8.0中运行: ![]()
程序显示的是可执行文件的准确位置!
这就是默认的,实际上这里的argv[1]的真实身份是argv[0],为了让大家好理解些,我在代码中(cout<<"argv["<<(i+1)<<"] :"<<argv[i]<<endl;)将i加了个1,希望大家不要误解。 我们换一个方式运行,在开始菜单中选择运行,输入cmd,进入到程序的位置: ![]() 我的工程位置如上所示,VC生成的可执行文件位于: E:/Documents/Visual Studio 2005/Projects/MainArgue/debug>
现在我们这样运行程序,手动的为程序添加更多的参数。
![]() 相信到这里大家应该很清楚主函数参数是什么了吧?可能有人会问这有什么用呢?大家是否记得DOS时代的编辑工具edit?学过汇编的人都应该知道用edit编辑asm文件吧?我们假如当前目录下有一个1.asm文件,我们要用edit编辑它,最快速的方法就是: edit 1.asm ↙ edit将自动打开1.asm。我不知道edit是否用主函数参数来实现该功能的,但是可以很明确的是,在我们C++中就可以用主函数参数的形式来实现。 我将刚才我们的示例程序稍作了一下修改: //关于主函数参数的讨论_鈊_煩_薏亂 #include <iostream> #include <fstream> #include <string> using namespace std; int main(int argc,char* argv[]) { if(argv[1]!=NULL) { ifstream infile(argv[1]); if(infile.fail()) { cout<<"打开文件失败"<<endl; return 1; } for(int i=0;!infile.eof();i++) { string ss; infile>>ss; cout<<ss<<endl; } infile.close(); } cout<<"argc的是:"<<argc<<endl; cout<<"下面输出的是从命令行获取到的信息:"<<endl; for(int i=0;i<argc;i++) { cout<<"argv["<<(i+1)<<"] :"<<argv[i]<<endl; } return 0; } 为了最大限度的降低难度,减少代码的数量,我们手动的在debug目录下建一个名叫111.txt的文本文件,随便添加一些字符进去都可以。 ![]() 该程序的功能就是获取程序的一个参数,然后读取参数所指定文件的内容并打印在屏幕上。
看看示例:
![]()
可以看到,输出成功!!来,让我们大家鼓掌庆贺一下,呵呵。
今天就到此为止吧,希望对大家有所帮助,如果有不妥的地方还请高手指正,我马上修改,否则误导了新人我可罪不容诛啊! 注意:您现在看到的是_鈊_煩_薏亂原创文章,请勿随意转载,转载请注明出处,谢谢合作! 看不到图片请点右键,显示图片! |