zoukankan      html  css  js  c++  java
  • c命令行参数

    转载自:http://blog.csdn.net/daheiantian/article/details/6246519


    命令行参数的最大作用就是让我们可以在程序之外控制程序,例如linux或者dos中我们经常使用的命令,从本质上将是一个程序;而我们使用的参数,就是该命令(对应的程序)的命令行参数。

             正是由于命令行的这么重要的作用,所以它成为各种编程语言不可缺少的功能,只是实现细节上略有不同,但大体上都是一样的,而且都比较简单。

    1. 先想一想

    1.1 程序中在哪里接收命令行参数(where)

             命令行参数,顾名思义,就是在命令行调用程序时传递的参数,那么谁来接收呢,一定是main函数了,因为程序是从main函数开始执行的啊。那作为一个函数,main怎么接收参数呢,很明显,用参数接收是最简单的方式。

    1.2 程序中怎样接收去接收参数(how)

            想一下现在linux或者dos命令中使用参数的形式,你是否能想到一个比现在的方式更简单的方式:【命令 选项 参数】。我是想不出来了,那么针对这种方式,如何来接收呢。其实也很简单,因为它们使用空格分开的,所以我们只要将它们作为字符串依次存在一个数组就行了,也就是使用一个指针数组,每个元素是一个字符指针。对于数组我们经常使用的一个特性就是数组的长度,为了防止每次都自己编写代码求长度(实际上是重复劳动,因为求一个指针数组的长度代码是固定的),所以显式的提供给我们这个长度是比较好的。

    2. 如何使用

            将main函数的声明为如下形式:

    1. int main( int argc, char *argv[]){  
    2.   
    3. /* 这里省略了函数体内容 */  
    4.   
    5. }  

          注意事项:

            1. argv是一个指针数组,要明白它的存数格式。它的每个元素都是一个字符指针,数组的末尾是一个NULL指针

            2. 也是由于argv是一个指针数组,它指向数组的第一个元素(是一个字符指针),所以argv是一个指向字符指针的指针,所以可以将其声明为char **argv。即声明为:【 int main( int argc, char **argv ) 】

            3. 参数名称是不重要的,你可以声明为其它的名字,比如 【 int main( int a, char *b[] ) 】 都是可以的。

            4. 指针数组argv的第 1 个元素,即argv[0],是程序名,也就是你的可执行文件的名字。

            5. 如果你输入的参数中有空格,应该使用双引号括起来。

    3.使用举例

            实现一个类似echo命令的程序:将所有参数打印出来。文件名为:my_echo.c

    1. #include <stdio.h>   
    2. #include <stdlib.h>   
    3.   
    4. /* 实现类似echo的输出一行 */   
    5.   
    6. #define BUFFER_SIZE 100  
    7.   
    8. void function( FILE *input );  
    9.   
    10. int main( int argc, char *argv[]){  
    11.     printf("argc == %d  /n", argc);   
    12.       
    13.     char ** temp = argv;  /* 保留argv */  
    14.     while( *++temp != NULL ){  
    15.         printf("%s ", *temp);  
    16.     }   
    17.     printf("/n");  
    18.       
    19.     system("pause");  
    20.     return EXIT_SUCCESS;  
    21. }  

    执行结果:(默认得到的可执行文件为my_echo.ext,在执行函数时,传递参数为hello world, hello C!)。如果在命令行中打开,使用my_echo.exe hello world, hello C!

    1. argc == 5  
    2. hello world, hello C!  

    分析:只需要弄清楚指针数组的内部结构,画了张图,见下面。

    csdn_命令行参数演示图

  • 相关阅读:
    loadNibNamed 的使用
    重写UIPageControl实现自定义按钮(转)
    乔布斯办公室语录
    学ACM算法题有用吗?
    基于文法分析的表达式计算器的实现
    我的程序员之路(5)——工作一年
    XCode实用快捷键,谁用谁知道
    LR(1)语法分析表生成
    九大定律,四大原则
    汉字为何不能用笔画编码信息论系列
  • 原文地址:https://www.cnblogs.com/batteryhp/p/5020445.html
Copyright © 2011-2022 走看看