码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • c strtok和strtok_s


    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    文章目录

    前言

    1. strtok

    2. 头文件

    3. 例子-分解字符串

    4. strtok_s

    5. 参考

    总结


    前言

    strtok和strtok_s函数功能是按分隔符分解字符串。


    1. strtok

    1.1 函数签名如下:

    char * strtok ( char * str, const char * delimiters );
    
    1. str : 要被分解成一组小字符串的字符串。
    2. delimiters : 包含分隔符的 C 字符串。

    1.2 返回值:

    该函数返回被分解的一个子字符串,如果没有可检索的字符串,则返回一个空指针。

    1.3 使用方法:

    1. 第1次调用时,第1个参数要传入1个C的字符串,作为要分割的字符串
    2. 后续调用时,第1个参数设置为空指针NULL
    3. 上一个被分割的子字符串的位置会被函数内部记住,所以后续调用时,第1个参数设置为NULL

    1.4 分割字符串的原理

    1. 子字符串的起点是第1个不含分隔符的字符
    2. 子字符串的终点是起点之后第1个含有分隔符的字符,或者整个字符串的终止字符
    3. 如此往复

    2. 头文件

    #include 

    3. 例子-分解字符串

    1. #include
    2. #include
    3. int main () {
    4. char str[80] = "This is - www.runoob.com - website";
    5. const char s[2] = "-";
    6. char *token;
    7. /* 获取第一个子字符串 */
    8. token = strtok(str, s);
    9. /* 继续获取其他的子字符串 */
    10. while( token != NULL ) {
    11. printf( "%s\n", token );
    12. token = strtok(NULL, s);
    13. }
    14. return 0;
    15. }

    结果:

    1. This is
    2. www.runoob.com
    3. website

    4. strtok_s

    使用时strtok可能会报错,说strtok是不安全的函数,建议使用strtok_s:

    error C4996: 'strtok': This function or variable may be unsafe. Consider using strtok_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 
    

    strtok要记住上一个子字符串的位置,所以多线程使用时不安全。

    上述报错可以通过设置_CRT_SECURE_NO_WARNINGS预处理定义来解决。

    也可以替换成使用strtok_s来解决。

    strtok_s的签名如下:

    char* strtok_s(char* str, const char* delimiters, char** next_token);
    

    strtok_s多了一个参数next_token,strtok_s把剩下的字符串写到next_token里,这样内部就不用记录子字符串等信息了,从而是线程安全的函数。

    把上面的例子改成使用strtok_s,如下:

    1. #include
    2. #include
    3. int main()
    4. {
    5. char str[80] = "This is - www.runoob.com - website";
    6. const char s[2] = "-";
    7. char *token;
    8. char *next_token = NULL;
    9. /* 获取第一个子字符串 */
    10. token = strtok_s(str, s, &next_token);
    11. /* 继续获取其他的子字符串 */
    12. while (token != NULL) {
    13. printf("%s\n", token);
    14. token = strtok_s(NULL, s, &next_token);
    15. }
    16. return 0;
    17. }

    结果:

    1. This is
    2. www.runoob.com
    3. website

    5. 参考

    http://www.cplusplus.com/reference/cstring/strtok/

    https://www.runoob.com/cprogramming/c-function-strtok.html

    https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strtok-s-strtok-s-l-wcstok-s-wcstok-s-l-mbstok-s-mbstok-s-l?view=vs-2019

    该处使用的url网络请求的数据。


    总结

    提示:这里对文章进行总结:
    例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 相关阅读:
    化工单元操作复习题(含答案)
    支持在代码编辑器中调试接口,IDEA插件推荐
    项目分享20
    快速幂的模板
    企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理
    H41H-40C法兰止回阀型号解析
    【web-解析目标】(1.2.3)解析应用程序:确定服务器端功能
    自我解剖与未来展望
    不专业面试官的经验总结
    Python爬虫之Urllib(内置库)
  • 原文地址:https://blog.csdn.net/2301_77560238/article/details/134004615
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号