zoukankan      html  css  js  c++  java
  • C++ main函数命令行参数使用

    1. C/C++语言中的main函数,经常带有参数argc,argv,如下:

    int main(int argc, char** argv)
    int main(int argc, char* argv[])

    C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为:

     main (int argc,char *argv[])

    2. 由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。

       如何在操作系统命令行获取参数呢?

        (1)在VS中设置时右键项目->属性->调试->命令参数,在命令参数中添加所需参数,字符串之间用空格分开即可。如果是.txt文件,要放在当前目录下(.cpp所在目录),不然找不到。

        (2)或者:假如你的程序是hello.exe,如果在命令行运行该程序,(首先应该在命令行下用 cd 命令进入到 hello.exe 文件所在目录) 运行命令为:

    1. hello.exe data.txt //.txt也在.exe所在目录下

       但是应该特别注意的是,main 的两个形参和命令行中的参数在位置上不是 一 一 对应的。

       因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。

    3. 举例:

    在调用一个可执行程序时,某些情况下需要向程序传递参数。如我们可以在控制台中键入notepad.exe,
    回车后将执行记事本程序。如果我们希望在打开notepad时同时打开一个文本文件,可以在notepad.exe  
    后面跟上文件的路径和名字,如notepad.exe   example.txt(文件在当前路径)。  
        
       那么程序中如何能得到这些输入参数呢?这个工作是编译器帮我们完成的,编译器将输入参数的信息
    放入main函数的参数列表中。  
        
       main函数的参数列表保存了输入参数的信息,第一个参数argc记录了输入参数的个数,  
       第二个参数是字符串数组的,字符串数组的每个单元是char*类型的,指向一个c风格字符串。  
       以notepad.exe   example.txt   data.txt   train.txt 为例  
       argc是4,就是说argv数组中有四个有效单元  
       第一单元指向的字符串是"notepad.exe"  
       第二单元指向的字符串是"example.txt"  
       第三单元指向的字符串是"data.txt"  
       第四单元指向的字符串是"train.txt"  


       argv数组中的第一个单元指向的字符串总是可执行程序的名字,以后的单元指向的字符串依次是程序调用时的参数。  
        
       这个赋值过程是编译器完成的,我们只需要读出数据就可以了。

    #include <iostream>
    using namespace std;
    
    
    int   main(int   argc, char*   argv[])
    {
        int   i;
        for (i = 0; i<argc; i++)
            cout << argv[i] << endl;
        system("pause");
        return   0;
    }

    在命令行参数中输入data.txt

    结果如下:

    
    
  • 相关阅读:
    原创frame-relay配置
    iptables详解和练习
    nfs-rpcbind-portmap挂载nfs-network file system
    linux-user-group添加与删除
    cgi-fastcgi-fpm
    lamp介绍
    子签CA以及给别人发CA
    正则表达式
    字符集和字符编码
    C++11新特性
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/6762437.html
Copyright © 2011-2022 走看看