当前位置: 首页 > news >正文

我国档案网站建设来客seo

我国档案网站建设,来客seo,装饰设计软件,管理微信软件strtok 是 C 标准库中的字符串分割函数,用于将一个字符串拆分成多个部分(token),以某些字符(称为分隔符)为界限。 函数原型 char *strtok(char *str, const char *delim);参数: str&#xff1a…

strtok 是 C 标准库中的字符串分割函数,用于将一个字符串拆分成多个部分(token),以某些字符(称为分隔符)为界限。


函数原型

char *strtok(char *str, const char *delim);
  • 参数

    • str:待分割的字符串。如果是第一次调用,传入要分割的字符串;之后的调用需传入 NULL,以继续上一次的分割。
    • delim:字符串,包含所有分隔符的字符集合。例如," "(空格)或 "/"(斜杠)
  • 返回值

    • 返回指向字符串中 当前部分 的指针。
    • 如果没有更多部分可返回,返回 NULL

用法规则

  1. 初次调用时,传入字符串 str,函数会从 str 中找到第一个部分。
  2. 函数会用 '\0' 替换找到的分隔符(破坏原字符串)。
  3. 后续调用时,传入 NULL,函数会继续从上次结束的位置查找下一部分。
  4. 不能在多线程环境中使用,因为 strtok 使用的是静态变量保存状态。

示例

#include <stdio.h>
#include <string.h>int main() {char str[] = "C programming is fun";const char *delim = " "; // 用空格作为分隔符char *token;// 初次调用 strtoktoken = strtok(str, delim);while (token != NULL) {printf("%s\n", token); // 打印分割的每一部分token = strtok(NULL, delim); // 后续调用}return 0;
}

输出

C
programming
is
fun

注意事项

  1. 原字符串被修改strtok 会在分隔符处插入 '\0',因此原字符串内容会被破坏。如果需要保留原字符串,请先复制到一个新字符串再操作。

  2. 不能并发使用:由于 strtok 使用内部静态变量保存状态,它在多线程程序中不安全。多线程环境下,请使用 strtok_r


分隔符的处理

分隔符 delim 可以包含多个字符,strtok 会将所有出现在 delim 中的字符视为分隔符。例如:

#include <stdio.h>
#include <string.h>int main() {char str[] = "apple;orange,banana|grape";const char *delim = ";,|"; // 多个分隔符char *token;token = strtok(str, delim);while (token != NULL) {printf("%s\n", token);token = strtok(NULL, delim);}return 0;
}

输出

apple
orange
banana
grape

如何在多线程中使用?

在多线程环境下,使用 strtok_r(线程安全版本)。函数原型如下:

char *strtok_r(char *str, const char *delim, char **saveptr);

参数说明

  • str:首次调用传入要分割的字符串,后续调用传入 NULL
  • delim:分隔符集合。
  • saveptr:保存分割状态的指针变量,需由调用者提供。

示例

#include <stdio.h>
#include <string.h>int main() {char str[] = "apple;orange,banana|grape";const char *delim = ";,|";char *token;char *saveptr; // 保存状态token = strtok_r(str, delim, &saveptr);while (token != NULL) {printf("%s\n", token);token = strtok_r(NULL, delim, &saveptr);}return 0;
}

输出

apple
orange
banana
grape

为什么需要传入 NULL

strtok 函数内部使用了一个 静态指针 来记录分割状态。这个静态指针会指向原字符串中上一次分割结束的位置。在首次调用时,strtok 初始化这个指针为传入的字符串地址。在后续调用时,通过传入 NULLstrtok 会继续从这个内部静态指针的位置接着分割。


静态指针的工作原理

  1. 初次调用

    token = strtok(str, delim);
    
    • 参数 str 是待分割字符串。
    • strtok 将分隔符替换为 '\0',并返回找到的第一个分割部分,同时保存分割结束的位置到静态指针中。
  2. 后续调用

    token = strtok(NULL, delim);
    
    • 参数 NULL 告诉 strtok 使用保存的静态指针,从上次分割结束的位置继续分割。
    • 每次分割后,strtok 会更新静态指针的位置。

示例分析

#include <stdio.h>
#include <string.h>int main() {char str[] = "C,programming,is,fun";const char *delim = ",";char *token;// 初次调用 strtoktoken = strtok(str, delim);printf("First token: %s\n", token); // 输出 "C"// 后续调用 strtoktoken = strtok(NULL, delim);printf("Second token: %s\n", token); // 输出 "programming"token = strtok(NULL, delim);printf("Third token: %s\n", token); // 输出 "is"token = strtok(NULL, delim);printf("Fourth token: %s\n", token); // 输出 "fun"token = strtok(NULL, delim);printf("Final token: %s\n", token); // 输出 "(null)",分割完成return 0;
}

输出

First token: C
Second token: programming
Third token: is
Fourth token: fun
Final token: (null)

内部指针变化

  1. 初次调用:
    • str"C,programming,is,fun"
    • 静态指针保存分割后的位置 "programming,is,fun"
  2. 第二次调用:
    • 使用静态指针继续分割。
    • 静态指针更新为 "is,fun"
  3. 第三次调用:
    • 静态指针更新为 "fun"
  4. 第四次调用:
    • 静态指针更新为 NULL

静态指针的局限性

1. 线程不安全

strtok 的静态指针是全局共享的,多个线程同时调用 strtok 会导致状态混乱。

解决方案:使用线程安全的 strtok_r 函数,它将状态保存到用户提供的指针(而非静态变量)中。

2. 不能同时分割多个字符串

因为 strtok 的静态指针只能记录一个字符串的分割状态。如果需要同时分割多个字符串,应使用其他方法(如 strtok_r 或自定义逻辑)。


总结

  • strtok 用于字符串分割,但会修改原字符串,并且线程不安全。
  • 多线程环境下,推荐使用 strtok_r
  • 分割的字符串存储在原字符串中,指针返回的是分割后的部分,原字符串会被破坏。
http://www.yayakq.cn/news/934254/

相关文章:

  • 陕西手机网站建设公司安庆什么网站做火
  • 开发网站所用技术杭州做网站优化
  • 怎么看网站源码用什么做的个人怎么做网络推广
  • 建网站难吗专门为98k做的网站
  • wordpress个人博客建站如何搭建一个网站平台
  • 做电销要在哪个网站上找资源官网华为
  • 效果好的网站建设公司韩国出线有多难
  • 外贸网站好做吗微网站是手机网站吗
  • 北京手机网站建设公司排名手机钓鱼网站免费制作
  • pc软件下载网站互联网设计公司排名
  • 衡水做外贸网站建设天津做再生资源交易的网站
  • 济南网站建设v芯企优互联不错广州seo工资
  • 网站建设必须要在阿里云备案吗简单小网站
  • 莆田人做的网站网站搭建技术有哪些
  • 怎样网站不用备案正规的官方赚钱app
  • 石家庄网站建站公司八百客crm管理系统
  • 开发一个网站一般需要多少钱专业东莞网站制作公司
  • 做旅游网站包括哪些栏目辽宁工程建设招标网
  • 做ppt模板的网站免费的企业网站制作
  • 蒙阴建设局网站网站基本要素
  • 答题网站怎么做平谷头条新闻
  • 网页设计网站搭建国家开发银行助学贷款网站
  • php网站开发优化方案长沙网站优化电话
  • 深圳网站建设制作品牌公司安徽蚌埠怀远县建设局网站
  • 广告设计与制作自我评价连云港网站关键字优化如何
  • 国外h5制作网站免费微信分销系统
  • 江西昌宇建设工程公司网站浦东网站建设箱海运
  • 长沙网站seo优化排名wordpress首页显示链接
  • 网站分析案例邵阳seo排名
  • 洛阳做多屏合一网站网络推广技巧与方法