问题在代码中用注释表明
int strassign(Str& str, char* ch)
{
if(str.ch)
free(str.ch); // 释放原串的空间,赋值的时候会重新给它分配相应的空间
int len = 0;
char *c = ch; // 定义一个c指针用来指向要进行赋值的字符串
while(*c) { // 求ch串的长度
++len;
++c;
}
if(len == 0) { // 如果ch为空串,则直接返回空串
str.ch = NULL;
str.length = 0;
return 1;
}
else {
str.ch = (char*)malloc(sizeof(char) * (len + 1));
// 取len + 1是为了多分配一个空间存放“\0”字符
if(str.ch == NULL) // 就是这个地方,为什么分配了空间还会有等于NULL的情况呢?
return 0;
else {
c = ch;
for(int i = 0; i <= len; ++i, ++c)
str.ch[i] = *c;
/*注意:循环条件中之所以用“<=”,是为了将ch最后的‘\0’复制到新串中最为结束标记*/
str.length = len;
return 1;
}
}
}