原创文章,转载请正确注明本文原始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

演示一下

 #include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int ch;
opterr = ;
while ((ch = getopt(argc,argv,"c:dls"))!=-)
{
switch(ch)
{
case 'c':
printf("config:%s\n",optarg);
break;
case 'd':
printf("debug mode\n");
break;
case 'l':
printf("print log\n");
break;
case 's':
printf("print status\n");
break;
default:
printf("ch=%c,unknown option :%c\n",ch,optopt);
}
}
printf("opterr=%d\n",opterr);
}

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

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及作者。

解析main函数的命令行参数的更多相关文章

  1. C++main函数与命令行参数,退出程序

    本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=vs-2019 (除动态链接库d ...

  2. Unix系统编程()main函数的命令行参数

    命令行参数输入双引号是什么效果? 好像可以去空格化.

  3. 第33课 main函数与命令行参数

    main函数的概念: 测试程序: 以上四种定义main函数的方法都是正确的. main函数的本质: 操作系统是希望main函数的有返回值的,这样可以知道main函数的退出状态. 如果程序时异常退出的, ...

  4. C++-main函数与命令行参数

    1.main函数的概念 C语言中main函数称之为主函数 —个C程序是从main函数开始执行的 下面的main函数定义正确吗? //1 main(){ } //2 void main(){ } //3 ...

  5. main函数与命令行参数

    main函数的概念 C语言中main函数称之为主函数 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函 ...

  6. Java的main函数(命令行传参)

    javac :编译命令 java  :执行命令

  7. [笔记] 命令行参数 int main(int argc,char *argv[])

    int main(int argc,char *argv[]) // argument count 变量个数 argument values 变量值 C程序的main函数有两个形参* argc:整数, ...

  8. Go 命令行参数,JSON 序列化与反序列化

    #### Go 命令行参数,JSON 序列,反序列化这一节来学习一下Go 如果解析命令行参数,以及JSON 的序列化及反序列化; 命令行参数对于熟悉Linux 的同学来说比较清楚,如: ls -a , ...

  9. getopt_long函数解析命令行参数

    转载:http://blog.csdn.net/hcx25909/article/details/7388750 每一天你都在使用大量的命令行程序,是不是感觉那些命令行参数用起来比较方便,他们都是使用 ...

随机推荐

  1. http_range说明

    100-200 // 第100到第200字节 500- // 第500字节到文件末尾 -1000 // 最后的1000个字节

  2. 学习笔记之Bokeh Data Visualization | DataCamp

    Bokeh Data Visualization | DataCamp https://www.datacamp.com/courses/interactive-data-visualization- ...

  3. [转][C#]Combobox 行高

    namespace System.Windows.Forms { class ComboBoxEx : ComboBox { public ComboBoxEx() { DrawMode = Syst ...

  4. 【原创】Docker实战 Dockerfile最佳实践&&容器之间通信

    官方最佳实践文档 https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#from Docker实战(三十) ...

  5. UnicodeString基本操作(Ring3)

    // Unicode_String_Ring3.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include "Unicode ...

  6. ueditor 正在读取目录及网络链接错误

    环境 ueditor1_3_5-gbk-net .NET版本3.5 如果把项目直接改成4.0不会出现这样的问题,查看 问题1:正在读取目录 找到ueditor/ueditor.config.js  找 ...

  7. Django的视图层简介

    Django的视图层 视图函数 所谓视图函数,其实就是我们Django项目中各个应用中的views.py文件中定义的每个用来处理URL路由映射到这里的逻辑函数.一个视图函数简称视图,它是个简单的Pyt ...

  8. [UE4]解决角色影子的问题

    一.自己应该是不能看到第一人称模型的影子,只要将第一人称模型影子不投影的就可以了.Cast Shadow勾选去掉就不会有影子了. 二.在第一人称视角中,枪支也是不应该有投影的.在weanpon中新增2 ...

  9. [UE4]删除UI:Remove from Parent

    同时要将保存UI的变量清空,以释放占用的系统内存

  10. AD中组的概念