strtok函数详解

strtok函数详解strtok函数

大家好,又见面了,我是你们的朋友全栈君。

在程序中为了传输数据,有时候需要将一组数据通过某个分隔符分隔组成一个字符串来传递,比如下面的字符串:

*#10?-ssid=test&-passwd=12345678&-netmask=255.255.255.0&-gateway=192.168.1.1&

上述字符串中:
*#10:用作校验,表示一个数据串的开始;
-ssid=test:表示一个网络的ssid;
-passwd=12345678:密码;
-netmask=255.255.255.0:子网掩码;
-gateway=192.168.1.1:网关。

其中校验码和其他的内容通过“?”来分隔,其他内容均是通过“&”来分隔。**strtok()**函数可以很方便的将该字符串中的每一个内容解析出来,下面为strtok的函数原型:

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

str:待分隔的字符串;
delimiters:分隔字符串。

该函数用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串中包含的所有字符。当strtok()在参数str的字符串中发现参数delimiters中包涵的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。每次调用成功则返回指向被分割出片段的指针。
  需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的str已经不一样了。 第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。 下面给出示例代码:

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

int main()  
{ 
     
    char str[]="*#10?-ssid=test&-passwd=12345678&-netmask=255.255.255.0&-gateway=192.168.1.1&";  
    char *ptr;  
    
    printf("before strtok: str=%s\n",str);  
    printf("begin:\n");  
   
    ptr = strtok(str, "?&");  
    while (ptr != NULL) { 
     
        printf("str: %s\n",str);  
        printf("ptr: %s\n",ptr);  
        ptr = strtok(NULL, "&");  
    }  

    return 0;  
}

运行结果:
这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159018.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • /etc/sudoers文件解析

    /etc/sudoers文件解析CATALOG前言规则讲解第一部分A第二部分B第三部分C第四部分D第五部分E举例前言/etc/sudoers文件一般涉及到linux系统中关于sudo命令的权限配置问题。规则讲解sudoers文件的数据,每一行分为五个部分,我们用ABCDE来表示。一般情况下是:AB={©}{D}E且C与D是可以省略的,我们用大括号扩起来方便大家注意到,但真正书写命令的时候不需要打括号。第一个部分A代表授权使用sudo的用户或者组第二部分B代表允许授权用户在哪些主机上使用这些权利第三部分C代

    2022年6月20日
    106
  • 彻底摆脱乱码的困惑

    彻底摆脱乱码的困惑

    2020年11月20日
    426
  • 机器学习框架对比

    机器学习框架对比2.1主流深度学习框架对比各个开源框架在Github上的数据统计数据统计截止于2017.07.15可以看到各大主流框架基本都支持Python,目前Python在科学计算和数据挖掘领域可以说是独领风骚。虽然有来自R、Julia等语言的竞争压力,但是Python的各种库实在是太完善了,Web开发、数据可视化、数据预处理、数据库连接,爬虫等无所不能,有一个完美的生态环境。仅

    2022年6月16日
    30
  • ubuntu安装npm

    ubuntu安装npm

    2021年9月13日
    58
  • 联合国世界卫生组织(WHO)认为健康的包括哪些方面?_联合国世界卫生组织把健康定义为

    联合国世界卫生组织(WHO)认为健康的包括哪些方面?_联合国世界卫生组织把健康定义为联合国世界卫生组织(WHO)对健康的定义是,即“健康不仅是没有疾病,而且包括躯体健康、心理健康、社会适应良好和道德健康”。由此可知,健康不仅仅是指躯体健康,还包括心理、社会适应、道德品质相互依存、相

    2022年8月1日
    6
  • vue可以和jquery一起用吗_项目中vue和jquery一起如何使用

    vue可以和jquery一起用吗_项目中vue和jquery一起如何使用拿起html的时候,在数据处理上,疯狂怀念数据双向绑定,vue又成了我的必选项,但是有些业务场景其实并不适用vue,所以最终技术选型为vue+jquery混合使用,结合两边的优点,大大提高开发效率。vue和jquery同时引入的时候,jquery操作一定要放在vue后面,要等DOM渲染完成,jquery才能进行DOM事件操作。那么vue+jquery应该如何使用呢?一、首先引入vue文件(cdn或者下载到本地都行),参考vue官方连接https://cn.vuejs.org/v2/guide/ins

    2022年10月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号