strtok函数详解
程序员文章站
2022-06-01 15:50:04
...
在程序中为了传输数据,有时候需要将一组数据通过某个分隔符分隔组成一个字符串来传递,比如下面的字符串:
*#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;
}
运行结果:
上一篇: halcon第十六讲:缺陷检测
推荐阅读
-
PHP使用empty检查函数返回结果时报Fatal error: Can't use function return value in write context的问题 - 心中的飞梦
-
php实现utf-8转unicode函数代码实例
-
nodejs中转换URL字符串与查询字符串详解_node.js
-
求解,getjson函数哪里写错了解决方法
-
vue引入js数字小键盘步骤详解
-
python常用函数
-
Nginx 缓存机制 详解之一 缓存管理进程
-
关于php 基于redis计数器类的详解
-
php常用hash加密函数,phphash加密_PHP教程
-
php数组操作函数之array_push()函数用法与定义