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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql错误码2058_MySQL 1045

    mysql错误码2058_MySQL 1045配置新连接报错:错误号码2058,分析是mysql密码加密方法变了。解决方法:windows下cmd登录mysql-uroot-p登录你的mysql数据库,然后执行这条SQL:ALTERUSER’root’@’localhost’IDENTIFIEDWITHmysql_native_passwordBY’password’;(注意分号)#password是你…

    2022年10月2日
    0
  • 暴力破解加密压缩文件

    暴力破解加密压缩文件实验目的应用Python程序设计语言的相关知识,对加密的压缩文件进行破解。实验所用仪器(或实验环境)Python3.8实验基本原理及步骤(或方案设计及理论计算)任务1:定义一个函数,函数带有一个参数L(类型为整数),函数返回一个长度为L、包含大小写字母和数字的随机密码(类型为字符串)。在任务1中,可以借助random中的choice,以及string库中的ascii_letters;至少用3个不同的长度测试函数的返回值。ascii_letters基本上是ascii_lowercase和

    2022年6月3日
    40
  • java版本结巴分词算法bug[通俗易懂]

    java版本结巴分词算法bug[通俗易懂]Nevertolate。所以明天再做也不会晚结巴分词的过程是:1、根据dict.txt中的词库构建一棵trie树,这棵树的实例只有一个,采取单例模式。2、每来一次分词构造,就顺着trie树进行分词,这将产生很多种结果,于是就生成了一个DGA,分词的有向无环图,终点是句子的左边或者右边(实际上应该分别以左边和右边为终点来做处理)。3、利用动态规划,从句子的终点开始,到这算回去(这个在动态…

    2022年6月25日
    20
  • 数字证书理解(CA证书签名原理)[通俗易懂]

    数字证书理解(CA证书签名原理)[通俗易懂]目的为了防止中间人攻击和钓鱼基础概念(要求预先了解的知识概念)对称密钥体系(对称加密)和非对称密钥体系(非对称加密)都提供2份秘钥。公钥私钥是概念上的,发布出去的为公钥,留在手上的为私钥,实质上不存在公私钥区别。特殊的:在实际操作中,生成RSA(特别的:一种加密方式)密钥时会有两个秘钥,其中一份包含另一份的完整信息【此时默认命名为私钥】——->这就是为什么私钥可以推导出公…

    2022年6月1日
    40
  • poe交换机能连接普通交换机_两台poe交换机之间怎么连接

    poe交换机能连接普通交换机_两台poe交换机之间怎么连接PoE交换机的链接方式有哪些?前面我们在介绍监控的供电方式时有介绍PoE供电,有一些朋友对poe供电存到一些疑问,那么,交换机品牌16年生产厂家ONV光网视小编今天就用图文形式来与您一起了解PoE的几种供电方式和连接方法。交换机一、交换机和终端都支持PoE  这种方法PoE交换机直接通过网线接到支持PoE供电的无线AP和网络摄像机上,这种方法最简单,但也需要注意如下两点:  1、确定PoE…

    2022年10月4日
    0
  • Laravel 5.4: 特殊字段太长报错 420000 字段太长

    Laravel 5.4: 特殊字段太长报错 420000 字段太长

    2021年10月29日
    46

发表回复

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

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