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;  
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm中如何导入库_如何把手变成手控

    pycharm中如何导入库_如何把手变成手控大家都知道,Python是一个极其方便的由库构建的编程语言。比如机器学习的库sklearn,文件读取pandas,文件读写xlwt,xlrt,矩阵运算numpy等等等等等等等等等等,多到你无法想象!那到底如何导入Python库呢?我们今天就来学习一下~点击File->NewProject,创建一个PyCharm项目,然后点击File->Settings->P…

  • Pytest(16)随机执行测试用例pytest-random-order[通俗易懂]

    Pytest(16)随机执行测试用例pytest-random-order[通俗易懂]前言通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果。pytest默认运行用例的顺序是按模块和用例命名的ASCII编码

  • MySQL Longtext字段优化记录(一)[通俗易懂]

    MySQL Longtext字段优化记录(一)[通俗易懂]Longtext优化记录

  • ftp客户端发起对ftp服务器_ftp登陆命令

    ftp客户端发起对ftp服务器_ftp登陆命令FTP是一个C/S类型的软件,连接服务端需要FTP客户端才能完成,常见的FTP客户端有以下几种:浏览器:可以通过浏览器中输入ftp://ip或者ftp://域名的方式3分钟了解计算机发展历史-组团学来访问FTP自带客户端:命令行下可以使用ftp命令去连接三方客户端:FileZilla8uftp图形软件或者文本界面的lftp等三种方式中,文本界面是比较麻烦的,无法鼠标流。所以我重点给大家讲解一…

    2022年10月21日
  • nginx根据url转发_nginx代理转发

    nginx根据url转发_nginx代理转发公司老项目是python做的,作为一个学java的,现在让我去重构这个项目的一部分页面,所以决定用java来重做,然后通过nginxurl转发来实现两个项目的无缝衔接,好了接下来看如何配置URL转发了很简单的第一个location是原先的项目第二个location是我要转发的路径即我访问www.lc.com/abc/**之后的请求都会被准发到另一个服务器去处理。配…

    2022年10月19日
  • pycharm代码运行快捷键_pycharm调试debug入门

    pycharm代码运行快捷键_pycharm调试debug入门1.eclipse配置的debug快捷键1.showexecutionpoint(alt+F10)显示当前所有断点2.stepover(F6)单步调试。若函数A内存在子函数a时,不会进入子函数a内执行单步调试,而是把子函数a当作一个整体,一步执行3.stepinto(F5)单步调试。若函数A内存在子函数a时,会进入子函数a内执行单步调试。4.stepintomycode(Alt+Shift+F7)执行下一行但忽略libraries(导入库的语句)5.force

发表回复

您的电子邮箱地址不会被公开。

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