strsep 陷阱

博客讨论了Linux中strtok和strsep函数的使用,建议避免使用strtok并转向strsep,因为strsep没有线程安全问题且更易用。然而,strsep对malloc字符串处理时可能造成指针变化,导致内存问题。在使用strsep前,必须备份返回的指针以正确释放内存,栈内存则不受此影响。文章提醒开发者注意这一潜在的陷阱,防止内存泄漏或错误释放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 刚才的指针,可能会导致内存报错问题或者泄露了。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值