• C/C++中如何让程序接受并处理命令行参数


    经由操作系统,用户可以为应用程序的运行指定额外参数,进而影响应用程序的行为。对于C/C++程序而言,经由操作系统提供的运行参数可由main()函数获取并处理。

    本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
    叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
    1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
    2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
    3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频

    读者如果有使用Linux终端或者Windows命令行的的经验,便知道操作系统是可以向应用程序传递参数的。比如,下述Linux终端命令为当前目录下的文件file1制作一份拷贝,其文件名为file2。

    cp file1 file2
    
    • 1

    这行命令里的字符串”file1”、”file2”即为cp命令的参数。读者自行创建并构建(build)▲完成的可执行程序也是应用程序,我们也可以通过操作系统为自己的应用程序提供参数,进而影响该应用程序的行为。对于C/C++程序而言,经由操作系统提供的运行参数可由main()函数获取并处理。

    请读者在Qt Creator中新建一个名为add的Plain C Application,然后将其中的main.c修改如下:

    //Project - add
    #include 
    #include 
    
    int main(int argc, char **argv){   //char *argv[]
        for (int i=0;i<argc;i++)
            printf("%d: %s,  %p\n", i, argv[i], argv[i]);
    
        int iSum = 0;
        for (int i=1;i<argc;i++)
            iSum += atoi(argv[i]);
    
        printf("sum = %d",iSum);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在编译并运行程序前,我们还需要在Qt Creator中做一些设置,以便指定程序运行的参数。在Qt Creator中选择“项目”页,在“运行设置”中将Command line arguments设置为33 777 103,这相当于给应用程序提了以空格分隔的三个参数,分别为33、777和103,如图6-7所示。请注意图中箭头以及黑色方框标识的内容。
    在这里插入图片描述
    接下来运行程序,结果如下:

    0: C:\C2Cpp\C6_Pointer_Reference\build-add-Desktop_Qt_5_14_1_MinGW_64_bit-Debug\add.exe,  00000000001E14A0
    1: 33,  00000000001E1420
    2: 777,  00000000001E1440
    3: 103,  00000000001E1500
    sum = 913
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说明:在读者的计算机上,执行结果中的地址很可能与本书不同。

    要解释这段程序及其执行结果,需要从main()函数的参数说起。

    int main(int argc, char **argv){   //char *argv[]
    ...
    
    • 1
    • 2

    argc及argv都是通过操作系统传递给应用程序的:

    • argc为int类型,表示操作系统传递给应用程序的参数个数。argc应该源自英文arguments count,意即参数总数。
    • argv为char**,它是一个指向指针的指针。事实上,argv指向的内存块中存储了argc个地址,每个地址均指向一个以0结尾的字符数组,这些字符数组即为参数字符串。实践中,可以把指针argv视为一个一维数组的数组名,该数组中有argc个元素,每个元素是一个类型为char的指针。所以,有的教科书中会将main()函数中的argv描述成char argv[ ],意即元素类型为char*的一维数组。argv这个名字源自英文arguments vector,意即参数向量。

    🚩第3行:stdlib.h头文件引入函数atoi( const char* str),该函数将参数字符串转换成对应的整数。如果希望将字符串转换成浮点数,应使用函数atof()。提醒读者注意,提供给atoi()函数的参数字符串需要是合法的整数格式,否则可能会引发错误。

    🚩第6 ~ 7行:通过循环,将argc个argv[i]分别按字符串以及地址形式输出。本例中,执行结果的前4行为相关输出。可以看出,argc的值为4,其中,第0个参数字符串即为被运行的可执行文件的路径,后面3个就是我们在“运行设置”中填入的Command line arguments。

    🚩第9 ~ 11行:通过循环将除去第0个之外的全部参数字符串转换为整数,并求和。从字符串到整数的转换是通过atoi()函数完成的。

    🚩第13行:打印求得的和。

    直观上,本例中的应用程序add.exe将参数中列出的全部整数相加,并输出和值。为了进一步让读者体会参数字符串的使用, 作者在自己的Windows 10计算机上,进行了如下操作:

    • 进入Windows命令行;
    • 通过cd命令进入到了可执行文件add.exe所在的目录,路径可在本例执行结果的第1行找到;
    • 执行命令add.exe 11 22 33 44,应用程序add.exe脱离Qt Creator运行,输出了和110。

    相关过程如下图所示。
    在这里插入图片描述

    为了帮助更多的年轻朋友们学好编程,作者在B站上开了两门免费的网课,一门零基础讲Python,一门零基础C和C++一起学,拿走不谢!

    简洁的C及C++
    由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造
    Python编程基础及应用
    由编程界擅长教书,教书界特能编程的海洋饼干叔叔打造

    如果你觉得纸质书看起来更顺手,目前Python有两本,C和C++在出版过程中。

    Python编程基础及应用

    Python编程基础及应用实验教程
    在这里插入图片描述

  • 相关阅读:
    elementui 更换主题色
    mysql索引和事务
    BOMBLAB
    ANR系列之八:疑难ANR问题处理记录
    【深度学习】卷积层填充和步幅以及其大小关系
    【C语言程序设计】实验 3
    Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)
    为什么MyBatis是Java数据库持久层的明智选择
    技术学习群-第二周内容共享
    C语言从头学16——数据类型(二)
  • 原文地址:https://blog.csdn.net/SeaBiscuitUncle/article/details/127422027