linux c 字符串替换

 参考https://www.linuxidc.com/Linux/2010-12/30741.htm

修改了一个bug  如 respacestr("123456","123","1234") 会逻辑卡死

/**
 * @n 字符串替换
 * @p sdev  source string
 * @p strs  string
 * @p strr  replace string
 * */
char * respacestr(char * sdev,char * strs,char * strr)
{
    char *p,*a;
    int lens = strlen(strs),lenr;
    int len;
	int off=0;
    int slen = strlen(sdev);
    if(strr == NULL) lenr = 0;
    else lenr = strlen(strr);
    len = lenr - lens;
	a = sdev;
    while((p = strstr(a,strs))!=NULL)
	{
        LOG("%d - %s\n",slen,sdev);
        if(len > 0) {
            sdev = (char *)realloc(sdev,slen+len);
            p = strstr(a,strs);
            memmove(p+lenr,p+lens,strlen(p+lens));
            memcpy(p,strr,lenr);
			
        } else if(len == 0) {
            memcpy(p,strr,lenr);        
        } else {
            memmove(p+lenr,p+lens,strlen(p+lens));
            if(lenr!=0)    memcpy(p,strr,lenr);        
        }	
		a  = p + lenr + 1;
        slen += len;
    }
    *(sdev+slen) = 0;
    return sdev;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值