分解命令行字符串为argc和argv

2023-11-10

有时候需要用空格把一个命令行参数字符串分解为参数个数和参数指针,就是常见的c语言main 函数入口argc, argv[], 这里采用strtok()函数可以很方便的做到.

char *strtok(char *str, const char *delim);

用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。
当strtok()在参数str的字符串中发现参数delim中包涵的分割字符时,则会将该字符改为\0
在第一次调用时,strtok()必需给予参数str字符串,
往后的调用则将参数str设置成NULL。使其从SAVE_PTR 中开始查找, 每次调用成功则返回SAVE_PTR
没有被分割的串时则返回NULL。
所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

下面给个实例.

#include <stdio.h>
#include <string.h>

const char *pSrc="this is a test";
int main()
{
    printf("origin str is: %s\n",pSrc);
    int argc=0;
    char *argv[20];

    char buf[256];
    strcpy(buf,pSrc);
    char *p=strtok(buf," ");
    while(p)
    {
//      printf("p is %p\n",p);
//      printf("%s\n",p);
        argv[argc]=p;
        argc++;
        p=strtok(NULL," ");
    }
    printf("argc is %d\n",argc);
    for(int i=0;i<argc;i++)
    {
        printf("argv[%d]: %s\n",i,argv[i]);
    }

    return 0;
}

核心调用就是 p=strtok(buf," ") 和 p=strtok(NULL," ")

其运行后输出结果为:

# ./test_argc_argv
origin str is: this is a test
argc is 4
argv[0]: this
argv[1]: is
argv[2]: a
argv[3]: test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分解命令行字符串为argc和argv 的相关文章

  • PCB相关知识-元器件+原理图

    文章目录 元器件Component 原理图Schematic 元器件Component 这里说的元器件指的是在原理图中使用的元器件符号 一个电阻 电容 电感 连接器 IC等都是一个元器件 元器件在原理图中只是一个电气符号 形状不定 比如可以
  • Windows下Win32 Disk Imager和Linux中dd命令两种方式烧录树莓派镜像

    下了好久的决心 终于买了一块树莓派 本着已是装机老手的心态 没有买装好系统的sd卡 自己买了一张准备自己装 结果很艰辛 最常见的装树莓派操作系统的方式就是 Win32 Disk Imager 再去领快递的前几个小时 我已经把前戏做的很足 镜

随机推荐

  • Dynamics 365详解

    什么是Dynamics 365 Dynamics 365是微软公司推出的一款企业资源计划 ERP 和客户关系管理 CRM 软件 它是微软旗下的云计算平台Azure上的一项服务 能够在多个设备和平台上运行 Dynamics 365结合了ERP
  • leetcode分类刷题:队列(Queue)(三、优先队列用于归并排序)

    1 当TopK问题出现在多个有序序列中时 就要用到归并排序的思想了 2 将优先队列初始化为添加多个有序序列的首元素的形式 再循环K次优先队列的出队和出队元素对应序列下个元素的入队 就能得到TopK的元素了 3 这些题目好像没有TopK 大用
  • Python--Email

    邮件定义 电子邮件 消息由头域 统称消息头 以及后面可选的消息体组成 根据 RFC 2822 唯一需要的消息标题只有发送日期字段和发送地址字段 即 Date 和 From MAIL FROM RCPT TO DATA 1 电子邮件系统组件和
  • Jbox2D入门学习一物理世界及最简单的物体创建

    这周末无聊 翻到舍友有本游戏开发的书 就浏览了遍 因为对游戏以前其实没接触过 可能就简单知道一边游戏绘图和逻辑以及游戏框架绘制的简单概念 这次主要是看了下游戏开发中最常用和基础的一个物理引擎 Box2D 对于这个引擎 可能说最好表现和表达出
  • Spring Boot彩色日志配置

    在spring boot中使用彩色日志 spring boot是默认支持彩色日志的 但是由于我又添加了自己的logback日志配置文件 然后就没有了彩色日志 经过一番搜索大法找到了一个完美还原spring boot的彩色日志 下面是logb
  • 华为OD机试 - 数字加减游戏(Java)

    题目描述 小明在玩一个数字加减游戏 只使用加法或者减法 将一个数字s变成数字t 每个回合 小明可以用当前的数字加上或减去一个数字 现在有两种数字可以用来加减 分别为a b a b 其中b没有使用次数限制 请问小明最少可以用多少次a 才能将数
  • 技术流

    如果让你向别人推荐十部电影 你会推荐哪十部 这是在知乎上被浏览过 2000 万的问题 一共有 5036 个回答 花 5 分钟读完这篇文章 可以帮你节省99 的找电影时间 全是知乎上最值得推荐的电影 并最后让你获取到几百万人收藏的超级电影名单
  • Spring 之 jwt,过滤器,拦截器,aop,监听器,参数校验

    Spring 之 jwt 过滤器 拦截器 aop 监听器 一 jwt编写 1 1 pom 1 2 JwtUtils 1 3 注意 1 4 用法 1 5 jwt实战 1 5 1 过滤器判断jwt 1 5 2 过滤器注入Bean 1 5 3 t
  • under-approximation & over-approximation

    Under approximation and over approximation are concepts often used in the context of formal methods a field that applies
  • IDM403解决办法之一:和百度网盘和平共处

    不知道有没有小伙伴和我一样 对百度云恨之入骨 在千兆时代 它的下载速度竟然还能再100KB左右 于是 我在网络上找了各种方法 最好用的是用IDM下载 不过有的时候 IDM也会失灵 特别是针对百度网盘里的大文件 以前300MB以上 这次我下载
  • git代码使用空格缩进

    1 idea设置缩进符为空格 Java 代码 golang 代码 2 设置提交仓库时的空格处理 否则 golang 代码为了减少文件大小 可能会把空格缩进改为制表符 设置当前仓库配置 git config core whitespace t
  • sublime text3 智能提示

    1 启动编辑器 编写代码方法 发现只有html方面的提示 并没有函数方面的提示 2 点击 preferences package control 准备插件包各项操作 3 点击下拉框中的 install package 安装插件包 4 在输入
  • 如何提高一个研发团队的“代码速度”?

    阿里妹导读 Code Velocity 代码速度 体现了一个研发团队快速响应业务需求的能力 如果做得好 代码从commit到上线可能平均只需要两三天时间 甚至连紧急发布都不怎么需要了 今天 蚂蚁金服国际事业群技术风险部研究员南门 将和大家聊
  • linux的oops界面,Linux编程时遇到Oops提示该如何排查?

    用于表示函数的调用关系 通过这段信息我们可以知道 函数的整个执行流程 知道它的函数调用关系 最后整理出来的函数执行流程如下 本文引用地址 http www eepw com cn article 201811 395128 htm 从中我们
  • 基于LiDAR的目标检测算法

    自动驾驶中 激光雷达点云如何做特征表达 基于激光雷达点云 lidar 的目标检测方法之BEV 基于激光雷达点云 lidar 的目标检测方法之camera range view 基于激光雷达点云 lidar 的目标检测方法之point wis
  • VueTouchKeyboard——一个模拟键盘

    功能需求 封装一个带有设计好的样式的输入组件 输入方式为模拟的数字键盘 键盘组件为VueTouchKeyboard 下载方式如下 npm install vue touch keyboard save image png 封装的输入组件 模
  • 素数的求解方法:

    一 朴素判断素数算法 就判断素数而言 事实上是非常简单的了 根据定义 判断一个整数n是否是素数 只需要去判断在整数区间 2 n 1 之内 是否具有某个数m 使得n m 0 代码可以这么写 int isPrime int n int i fo
  • Arduino IDE 烧录 ESP8266教程

    Arduino IDE for ESP8266教程 原出处 http www windworkshop cn p 758 ESP8266是现在性价比不错的Wifi模块 用了一块ESP8266 01之后感觉还行 用在数据采集器上表现还是不错的
  • IDEA中build path导入外包jar 包的方法

    小编今天需要在IDEA中导入外部jar包 由于在eclipse中可以在外部jar包上直接右键 build path 然后点击add to Build Path 就成功导入了 可惜IDEA并不是如此 有点小苦恼 接下来 小编就带大家操作 ID
  • 分解命令行字符串为argc和argv

    有时候需要用空格把一个命令行参数字符串分解为参数个数和参数指针 就是常见的c语言main 函数入口argc argv 这里采用strtok 函数可以很方便的做到 char strtok char str const char delim 用