关于C++主函数参数--图文并茂

 
 
 
关于C++主函数参数--图文并茂
 

最近在百度知道上看到比较多的人在询问关于主函数参数的问题,所以才打算做一个这个,希望对新手们有所帮助。

根据最新的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的文本文件,随便添加一些字符进去都可以。

  

该程序的功能就是获取程序的一个参数,然后读取参数所指定文件的内容并打印在屏幕上。

看看示例:
      
   可以看到,输出成功!!来,让我们大家鼓掌庆贺一下,呵呵。

今天就到此为止吧,希望对大家有所帮助,如果有不妥的地方还请高手指正,我马上修改,否则误导了新人我可罪不容诛啊!

注意:您现在看到的是_鈊_煩_薏亂原创文章,请勿随意转载,转载请注明出处,谢谢合作!

看不到图片请点右键,显示图片!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值