鱼C论坛

 找回密码
 立即注册
查看: 1658|回复: 4

[已解决]有关字符串赋值问题

[复制链接]
发表于 2022-7-6 21:40:41 | 显示全部楼层 |阅读模式
40鱼币
int strassign(Str &str, char *ch) //将ch字符串的值赋给str.ch
{
    //初始化str
    if(str.ch)
    {
        free(str.ch);
    }
    int len=0;
    char *c=ch;
    while(*c)//计算ch字符串的长度
    {
        ++len;
        ++c;
    }
    if(len==0)
    {
        str.ch=NULL;
        str.length=0;
        return 1; //赋值成功返回1
    }
    else
    {
        str.ch=(char*)malloc(sizeof(char)*(len+1));
        //取len+1是为了多分配一个空间存放“\0”字符
        if(str.ch==NULL)
            return 0;//空间分配失败。
        else
        {
            c=ch;
            for(int i=0;i<=len;++i,++c)//<=是为了把“\0”赋值上
            {
                str.ch[i]=*c;
            }
            str.len=len;
            return 1;
        }
    }
}
因为不知道怎么发代码所以就直接敲出来了请见谅
以上的代码我有两个地方没理解,第一个是在一开始为什么要释放原串的空间,虽然我知道释放以后指针的值还在,但是没明白有什么用,以及后面的重新申请内存空间的地方,不是很理解
第二个是在while循环中c应该已经指向串的尾部了,为什么在后面直接用c=ch 把ch指向的地址直接给了c?
最佳答案
2022-7-6 21:40:42
问题一,释放str.ch内存空间,避免内存泄漏,不能体现吧代码严谨
问题二, 此处c作为临时变量使用,不破坏原来的指针,c = ch(ch是参数传进来的),c指向ch的头,移动c,str.ch[i]=*c;实现复制

最佳答案

查看完整内容

问题一,释放str.ch内存空间,避免内存泄漏,不能体现吧代码严谨 问题二, 此处c作为临时变量使用,不破坏原来的指针,c = ch(ch是参数传进来的),c指向ch的头,移动c,str.ch=*c;实现复制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-6 21:40:42 | 显示全部楼层    本楼为最佳答案   
问题一,释放str.ch内存空间,避免内存泄漏,不能体现吧代码严谨
问题二, 此处c作为临时变量使用,不破坏原来的指针,c = ch(ch是参数传进来的),c指向ch的头,移动c,str.ch[i]=*c;实现复制
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-6 21:55:30 | 显示全部楼层
1.因为要给str.ch赋值,待会会将str.ch指向另一个地址,所以要先释放原来的地址空间
2.这只是让c这个指针指向另一个地址而已,为什么不可以呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 16:12:55 | 显示全部楼层
临时号 发表于 2022-7-6 21:55
1.因为要给str.ch赋值,待会会将str.ch指向另一个地址,所以要先释放原来的地址空间
2.这只是让c这个指针指 ...

明白了谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 16:13:26 | 显示全部楼层
ba21 发表于 2022-7-6 22:08
问题一,释放str.ch内存空间,避免内存泄漏,不能体现吧代码严谨
问题二, 此处c作为临时变量使用,不破坏 ...

懂啦懂啦 感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 18:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表