• 解析main函数的命令行参数


    原创文章,转载请正确注明本文原始URL及作者。

    介绍

    写C/C++程序,我们常常需要把main函数的参数作为选项来传递。在linux中,解析选项有专门的函数可以用。

     int getopt(int argc,char * const argv[ ],const char * optstring); 

    getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。
    参数optstring 则代表你想要处理的选项字符串。
    此函数处理的是短格式的选项,像"-a"这样只有一个字母的就是选项。
    此函数会返回在argv 中下一个的选项字母,此字母会对应参数optstring 中的一个字母。
    如果选项字符串里的字母后接着冒号":",则表示此选项还有相关的参数,全域变量optarg 即会指向此额外参数。
    如果getopt()发现有optstring以外的选项,则返回字符'?'并用全域变量optopt接收该未知选项,并且打印出错信息。如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
    这里涉及到三个全局变量: optarg optopt opterr

    演示一下

     1 #include <stdio.h>   
     2 #include <unistd.h>    
     3 int main(int argc, char *argv[])   
     4 {   
     5     int ch;   
     6     opterr = 0;   
     7     while ((ch = getopt(argc,argv,"c:dls"))!=-1)   
     8     {   
     9         switch(ch)   
    10         {   
    11             case 'c':   
    12                 printf("config:%s
    ",optarg);   
    13                 break;   
    14             case 'd':   
    15                 printf("debug mode
    ");   
    16                 break;   
    17             case 'l':   
    18                 printf("print log
    ");   
    19                 break;   
    20             case 's':   
    21                 printf("print status
    ");   
    22                 break;      
    23             default:   
    24                 printf("ch=%c,unknown option :%c
    ",ch,optopt);   
    25         }   
    26     }    
    27     printf("opterr=%d
    ",opterr);   
    28 }   

    传参测试一下,运行结果如下:

    test@localhost:~$ ./a.out -lsd -c hello.ini -AB
    print log
    print status
    debug mode
    config:hello.ini
    ch=?,unknown option :A
    ch=?,unknown option :B 

     

    我参考了这个资料,但其中有点错误,他把optopt说反了。

     原创文章,转载请正确注明本文原始URL及作者。

  • 相关阅读:
    csuoj 1391: Boiling Vegetables
    csuoj 1392: Number Trick
    nyist 78 圈水池
    1393: Robert Hood 旋转卡壳 凸包
    模板 旋转卡壳 凸包
    模板 凸包 旋转卡壳
    ASP.NET Web API2返回值处理流程
    DependencyInjection源码解读之ServiceProvider
    深入研究EF Core AddDbContext 引起的内存泄露的原因
    私有云方案——利用阿里云云解析实现DDNS
  • 原文地址:https://www.cnblogs.com/zhaojk2010/p/5285075.html
Copyright © 2020-2023  润新知