📜  C / C++中的命令行参数

📅  最后修改于: 2021-05-30 19:57:25             🧑  作者: Mango

C / C++最重要的函数是main()函数。它主要是用int的返回类型定义的,并且没有参数:

int main() { /* ... */ } 

我们还可以在C和C++中提供命令行参数。在操作系统的命令行外壳程序中,在程序名称之后给出命令行参数。
为了传递命令行参数,我们通常使用两个参数定义main():第一个参数是命令行参数的数量,第二个是命令行参数的列表。

int main(int argc, char *argv[]) { /* ... */ }

或者

int main(int argc, char **argv) { /* ... */ }
  • argc(ARGument Count)为int,存储用户传递的命令行参数数量,包括程序名称。因此,如果我们将值传递给程序,则argc的值为2(一个用于参数,一个用于程序名称)
  • argc的值应为非负数。
  • argv(ARGument Vector)是列出所有参数的字符指针数组。
  • 如果argc大于零,则从argv [0]到argv [argc-1]的数组元素将包含指向字符串的指针。
  • Argv [0]是程序的名称,之后,直到argv [argc-1]为止,每个元素都是命令行参数。

为了更好地理解,请在您的linux机器上运行此代码。

// Name of program mainreturn.cpp
#include 
using namespace std;
  
int main(int argc, char** argv)
{
    cout << "You have entered " << argc
         << " arguments:" << "\n";
  
    for (int i = 0; i < argc; ++i)
        cout << argv[i] << "\n";
  
    return 0;
}

输入:

$ g++ mainreturn.cpp -o main 
$ ./main geeks for geeks

输出:

You have entered 4 arguments:
./main
geeks
for
geeks

注意: C和C++标准还允许使用其他与平台相关的格式;例如,Unix(尽管不是POSIX.1)和Microsoft Visual C++具有提供程序环境的第三个参数,否则可以通过stdlib.h中的getenv进行访问:有关详细信息,请参考C程序以打印环境变量。

命令行参数的属性:

  1. 它们被传递给main()函数。
  2. 它们是调用程序时提供给程序的参数/参数。
  3. 它们用于从外部控制程序,而不是在代码内部对这些值进行硬编码。
  4. argv [argc]是NULL指针。
  5. argv [0]保存程序的名称。
  6. argv [1]指向第一个命令行参数,而argv [n]指向最后一个参数。

注意:传递的所有命令行参数都用空格分隔,但是如果参数本身具有空格,则可以通过将其放在双引号“”或单引号”中来传递此类参数。

// C program to illustrate
// command line arguments
#include
  
int main(int argc,char* argv[])
{
    int counter;
    printf("Program Name Is: %s",argv[0]);
    if(argc==1)
        printf("\nNo Extra Command Line Argument Passed Other Than Program Name");
    if(argc>=2)
    {
        printf("\nNumber Of Arguments Passed: %d",argc);
        printf("\n----Following Are The Command Line Arguments Passed----");
        for(counter=0;counter

在不同情况下的输出:

  1. 不带参数:在不传递任何参数的情况下编译和执行上述代码时,将产生以下输出。
    $ ./a.out
    Program Name Is: ./a.out
    No Extra Command Line Argument Passed Other Than Program Name
    
  2. 三个参数:上面的代码用三个参数编译并执行时,将产生以下输出。
    $ ./a.out First Second Third
    Program Name Is: ./a.out
    Number Of Arguments Passed: 4
    ----Following Are The Command Line Arguments Passed----
    argv[0]: ./a.out
    argv[1]: First
    argv[2]: Second
    argv[3]: Third
    
  3. 单参数:上面的代码用一个由空格分隔但在双引号内的单个参数编译和执行时,将产生以下输出。
    $ ./a.out "First Second Third"
    Program Name Is: ./a.out
    Number Of Arguments Passed: 2
    ----Following Are The Command Line Arguments Passed----
    argv[0]: ./a.out
    argv[1]: First Second Third
    
  4. 用引号分隔的单个参数:用空格分隔但在单引号内的单个参数编译和执行以上代码时,将产生以下输出。
    $ ./a.out 'First Second Third'
    Program Name Is: ./a.out
    Number Of Arguments Passed: 2
    ----Following Are The Command Line Arguments Passed----
    argv[0]: ./a.out
    argv[1]: First Second Third
    

参考:
http://www.cprogramming.com/tutorial/lesson14.html
http://c0x.coding-guidelines.com/5.1.2.2.1.html

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”