有关字符串赋值问题
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=*c;
}
str.len=len;
return 1;
}
}
}
因为不知道怎么发代码所以就直接敲出来了请见谅
以上的代码我有两个地方没理解,第一个是在一开始为什么要释放原串的空间,虽然我知道释放以后指针的值还在,但是没明白有什么用,以及后面的重新申请内存空间的地方,不是很理解
第二个是在while循环中c应该已经指向串的尾部了,为什么在后面直接用c=ch 把ch指向的地址直接给了c? 问题一,释放str.ch内存空间,避免内存泄漏,不能体现吧代码严谨
问题二, 此处c作为临时变量使用,不破坏原来的指针,c = ch(ch是参数传进来的),c指向ch的头,移动c,str.ch=*c;实现复制 1.因为要给str.ch赋值,待会会将str.ch指向另一个地址,所以要先释放原来的地址空间
2.这只是让c这个指针指向另一个地址而已,为什么不可以呢 临时号 发表于 2022-7-6 21:55
1.因为要给str.ch赋值,待会会将str.ch指向另一个地址,所以要先释放原来的地址空间
2.这只是让c这个指针指 ...
明白了谢谢 ba21 发表于 2022-7-6 22:08
问题一,释放str.ch内存空间,避免内存泄漏,不能体现吧代码严谨
问题二, 此处c作为临时变量使用,不破坏 ...
懂啦懂啦 感谢
页:
[1]