看了很多高赞CSDN文章和百度百科,越看越晕,浪费好多时间,特此记录
先介绍strtok,后边给个strtok_s的例子

注意:这两个函数必要连续调用多次才能实现分割和输出功能,一般和while循环配合,初始调用和后续调用有些区别,把握这一点就ok了

01 定义

定义于头文件 cstring
函数原型
char* strtok( char* str, const char* delim );

02 调用说明

寻找 str 所指向的空终止字节字符串中的下个记号。由 delim 所指向的空终止字节字符串鉴别分隔字符。

此函数被设计为调用多次,以从同一字符串获得相继的记号。

  • 若 str 不是空指针,则调用被当做 strtok 对此特定字符串的首次调用。函数搜索首个不含于 delim 的字符。
    若找不到这种字符,则 str 中完全没有记号,而函数返回空指针。
    若找到这种字符,则它是记号的起始。然后函数从 delim 所含的首个字符的该点搜索。
    若找不到这种字符,则 str 只有一个记号,而将来对 strtok 的调用将返回空指针
    若找到这种字符,则用空字符 ‘\0’ 替换它,并将指向下个字符的指针存储于静态位置,以为后继调用所用。
    然后函数返回指向记号起始的指针

  • 若 str 为空指针,则将调用当做对 strtok 的后继调用,函数从先前调用中它剩下的位置开始。行为如同将先前存储的指针作为 str 传递。

03 参数

str - 指向要记号化的空终止字节字符串的指针
delim - 指向标识分隔符的空终止字节字符串的指针

04 返回值

指向下个记号起始的指针,或若无更多记号则为空指针。

05 注解

此函数是破坏性的:它写入 ‘\0’ 字符于字符串 str 的元素。特别是,字符串字面量不能用作 strtok 的首参数。

每次对 strtok 的调用都会修改静态对象:它不是线程安全的。

不同于大多数其他记号化器, strtok 中的分隔符能对于后继记号不同,而且甚至能依赖于先前记号的内容。

06 代码示例

#include <cstring>
#include <iostream>int main()
{char input[100] = "A bird came down the walk";char *token = std::strtok(input, " ");while (token != NULL) {std::cout << token << '\n';token = std::strtok(NULL, " ");}
}

08 拓展strtok_s

函数原型
char *strtok_s(char * str, const char * delim, char **ptr);
说明
strtok_s是strtok线程安全版本,使用方法大同小异,多了一个存放剩余字符的地址参数,说白了就是分割完剩下的找个地址存好,方便下一次用

void test() {char str[] = "ab,cd,ef";cout << "原始字符串为:" << str << endl;char* token;char* next_token;token = strtok_s(str, ",", &next_token);    //初始调用while (token != NULL) {   // 后续找不到返回Null就退出printf("分割子字符串%s\n", token);printf("剩余字符串=%s\n", next_token);token = strtok_s(NULL, ",", &next_token);  // 后续调用}}

07 参考链接

https://www.apiref.com/cpp-zh/cpp/string/byte/strtok.html
https://www.apiref.com/cpp-zh/c/string/byte/strtok.html
Ps:这个网站也是一个很好的函数文档网站

strtok和strtok_s函数使用说明相关推荐

  1. strtok,strtok_s函数用法

    strtok_s有得编译器不支持,实在不行,用strtok也能编程,strtok_s更安全一点(两者的参数不同),实在不行,可以查MSDN看看他们的用法 strtok函数有两个参数: char a[] ...

  2. strtok、strtok_s、strtok_r 字符串分割函数

    1.strtok函数 函数原型:char * strtok (char *str, const char * delimiters); 参数:str,待分割的字符串(c-string):delimit ...

  3. 字符串切割函数strtok、strtok_s、strtok_r的区别

    strtok函数 头文件:#include <string.h> 函数原型:char * strtok (char *str, const char * delimiters); 参数:s ...

  4. strtok()和strtok_s()

    strtok(), strtok_s() 字符串分割函数 //strtok()函数原型/*_Check_return_ _CRT_INSECURE_DEPRECATE(strtok_s) _CRTIM ...

  5. MATLAB中神经网络train函数使用说明

    MATLAB中神经网络train( )函数使用说明 函数的语法格式如下: [net, tr]=train(net, P, T, Pi, Ai): train( )函数用于训练创建好的感知器网络,事实上 ...

  6. header()函数使用说明

    header()函数使用说明:     一.作用:   ~~~~~~~~~          PHP只是以HTTP协议将HTML文档的标头送到浏览器,告诉浏览器具体怎么处理这个页面,至于传送的内容则需 ...

  7. php函数fiter,PHP filter_var() 函数和 Filter 函数使用说明

    PHP filter_var() 函数和 Filter 函数使用说明 发布于 2014-11-11 10:36:23 | 87 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP( ...

  8. 【ML】numpy ravel、c_、r_函数使用说明(结合实际案例)

    [ML]numpy ravel.c_.r_函数使用说明(结合实际案例) 基本使用 ravel()函数用法 c_函数用法 r_函数用法 实践 基本使用 ravel()函数用法 ravel函数将一个多维数 ...

  9. 主成分分析及PCA函数使用说明

    主成分分析及PCA函数使用说明 主成分分析的基本思想 主成分分析就是把原有的多个指标转化成少数几个代表性较好的综合指标,这少数几个指标能够反映原来指标大部分的信息(85%以上),并且各个指标之间保持独 ...

最新文章

  1. Putdb WebBuilder 6.5 正式版本发布
  2. 通俗易懂,Maven依赖pom中的scope详解
  3. hadoop2.5.1集群部署(完全分布式)
  4. 从 ES 规范 中理解 this
  5. Android 性能优化---(7)布局优化
  6. geotools 读取shp属性过滤_Flink进阶之使用布隆过滤器实现UV统计
  7. Android开发:keytool' 不是内部或外部命令 也不是可运行的程序
  8. 关于EPOLL的ET和LT模式的深入理解
  9. C语言例题:数字重组
  10. SQL正则表达式、列表运算、涉及null的查询
  11. SuperMap 三维产品白皮书
  12. c语言程序设计精髓第四章编程题
  13. 算法注册机编写扫盲之续篇---第二课
  14. 在EntityFramework中使用 nock的方法。
  15. 买房应该全款还是贷款
  16. mysql表文件与结构_MySQL文件结构、逻辑架构及sql执行流程分析
  17. python写文件numpy_Numpy | 23 文件读写
  18. Appium-Press keycode(按键代码)
  19. 手机上的计算机黑屏怎么办,手机黑屏是怎么回事,详细教您苹果手机黑屏怎么办...
  20. CDN在前端开发中的作用

热门文章

  1. Python - 升级pip时提示拒绝访问
  2. 国外手游公司老板们如何开发游戏?
  3. grub linux修复 pe,恢复Ubuntu GRUB引导的方法
  4. 软件定义网络基础(SDN①)
  5. 小米手环7模拟加密门禁卡
  6. 淘宝长辈模式技术实践万字总结
  7. telegram纯协议电报群发,自动加群,引流自动化解放双手*
  8. 加载R包unloadNamespace时,我该怎么办
  9. 乐观锁和悲观锁区别以及使用场景
  10. 如何生成jks证书文件