strsep 陷阱

strsep 陷阱linux 现在不要推荐使用 strtok 转而推荐 strsep 也确实没有线程安全问题 更加好用 但是这个函数对于理解不深的同学还是有一定的使用陷阱 如果这个函数分解的是一个 malloc 的字符串 将申请内存的指针直接传入而没有备份的话 会导致指针指向变化 因为第一个参数是个二级指针 该函数的运作决定这个指针会根据分解字符串的过程导致指针不断向后推移 char strsep chars constchar ct char sbegin s e

linux 现在不要推荐使用 strtok,转而推荐strsep,也确实没有线程安全问题,更加好用,但是这个函数对于理解不深的同学还是有一定的使用陷阱:

        如果这个函数分解的是一个 malloc的字符串,将申请内存的指针直接传入而没有备份的话,会导致指针指向变化,因为第一个参数是个二级指针,该函数的运作决定这个指针会根据分解字符串的过程导致指针不断向后推移。

 char * strsep(char s, const char *ct) { char *sbegin = *s, *end; if (sbegin == NULL) return NULL; end = strpbrk(sbegin, ct); if (end) *end++ = '\0'; *s = end; return sbegin; } 

如果最后还是 free 刚才的指针,可能会导致内存报错问题或者泄露了。

因此使用前,应该备份申请返回的指针,来用做释放内存。

栈内存不用考虑这个问题。

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209281.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:37
下一篇 2026年3月19日 上午9:37


相关推荐

  • 尚硅谷2026年AI大模型智能体线上速成班教程资料

    尚硅谷2026年AI大模型智能体线上速成班教程资料

    2026年3月15日
    2
  • Redis缓存穿透、缓存雪崩问题分析

    Redis缓存穿透、缓存雪崩问题分析把redis作为缓存使用已经是司空见惯,但是使用redis后也可能会碰到一系列的问题,尤其是数据量很大的时候,经典的几个问题如下:(一)缓存和数据库间数据一致性问题分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存。我们只能采取合适的策略来降低缓存和数据库间数据不一致的概率,而无法保证两…

    2022年6月29日
    29
  • Java获取当前时间年月日_JS得出当前年月日时间的代码

    Java获取当前时间年月日_JS得出当前年月日时间的代码packagecom.ob;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;publicclassDateTest{ publicstaticvoidmain(String[]args)

    2025年7月23日
    3
  • cursor 使用指南

    cursor 使用指南

    2026年3月15日
    4
  • eBay是如何进行大数据集元数据发现的

    eBay是如何进行大数据集元数据发现的

    2021年6月29日
    72
  • 自监督学习的知识点总结

    自监督学习的知识点总结本篇文章将对自监督学习的要点进行总结,包括以下几个方面:监督学习与自监督学习自监督学习需求背后的动机NLP和CV中的自监督学习联合嵌入架构对比学习关于数据增强的有趣观察非对比学习总结和参考监督学习与自监督学习监督学习:机器学习中最常见的方法是监督学习。在监督学习中,我们得到一组标记数据(X,Y),即(特征,标签),我们的任务是学习它们之间的关系。但是这种方法并不总是易于处理,因为-训练通常需要大量数据,而标记数百万行数据既耗时又昂贵,这就对许多不同任务的训练模型造成了瓶颈。以

    2025年11月15日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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