命令行参数小结

    说来惭愧,对于命令行参数这个概念接触的比较少,可能也是之前一直使用IDE进行开发程序的原因吧,对于C程序,总是从main函数开始执行,main函数的原型如下:

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

这里面我们可以发现main函数的特点:

(1)有两个形参,argc和 argv。

(2)返回值为 int,有符号整型,我们常常在main函数的最后,添加 return 0或者exit(0).

所谓命令行参数,就是我们的main程序执行时,通过shell等命令传送给main的 参数,比如一个程序的可执行程序为:test,那么在unix下,执行该程序的命令为:

./test arg1 arg2 arg3

   这相当于执行test,并且传送给main 3个参数:arg1,arg2,arg3,这种设计也是有道理的,普通函数,我们可以通过调用函数时直接传送,但是main函数,是C程序的开头(这里不抬杠,因为有些是从汇编startup开始执行的,然后再跳转到main),所以不能像普通函数那样进行调用,所以需要另一种方式传递参数,命令行参数的功能就是实现给main函数传递参数,我们只需要执行程序时,在后面按顺序以空格 间隔,编写参数即可。

两个参数的含义:

argc :命令行参数的数目,这里有个注意,编译器默认argc最小为1,也就是main函数的第一个命令行参数一定是这个可执行程            序的路径,这个路径存放在argv[0]中。

argv:  是指向参数的各个指针构成的数组,也就是指针数组,也可以认为是双指针,这个也好理解,指针是个地址,地址是                   个“头”,后面可以跟n多字节。

我们来看一个程序例程:

#include <stdio.h>

int
main(int argc, char *argv[])
{
        int             i;

        printf("the argc:%d\n", argc);
        for (i = 0; i < argc; i++)              /* echo all command-line args */
                printf("argv[%d]: %s\n", i, argv[i]);
       
        return 0;
}

  我们编译该程序,我这里通过gcc来编译,然后运行程序:

通过上面的执行结果我们可以发现,传入了2个参数,但是打印了3个参数,验证了前面的 默认情况,而且不管我们传递的参数是否包含了“ ”(双引号),默认都是字符串。

小结:

(1)命令行参数 argc 最小为1, 也就是默认有1个命令行参数为:可执行程序的 路径。

(2)argv[0] 默认存放 可执行程序的路径,自己传递的命令行参数从 argv[1]开始存储。

(3)命令行参数为 字符串,不管是否添加 “ ”,都按字符串处理。

发布了247 篇原创文章 · 获赞 257 · 访问量 62万+

猜你喜欢

转载自blog.csdn.net/u012351051/article/details/100173796