c/C++语言的串复制问题

来源:百度知道 编辑:UC知道 时间:2024/04/30 12:33:42
#include "stdlib.h"
typedef struct
{
char *ch;
int length;
}HString;

int StrAssign(HString &T,char *chars)
{
if(T.ch) free(T.ch);
for(int i=0,char *c=chars;c;++i,++c);
if(!i) { T.ch=0; T.length=0;}
else
{
if(!(T.ch=(char*)malloc(i*sizeof(char))))
exit(0);
for(int j=0;j<i;++j)
T.ch[j]=chars[j];
T.length=i
}
return 1;
}
数据结构,就是做最原始的东西
for(int i=0,char *c=chars;c;++i,++c);
求字符长度,字符数组怎么表示啊

1. if(T.ch) free(T.ch); 这需要你在声明一个HString变量的时候必须初始化使 ch = 0 ,否则这句free就会挂掉

2. for(int i=0,char *c=chars;c;++i,++c); 中间那个 c 什么意思
应该是 *c吧。 其实这个直接写 int i= strlen(chars);就可以了

for(int i=0,char *c=chars;c;++i,++c);
这句绝对错误,除了chars的值为NULL,否则是一个死循环。

#include "stdlib.h"
typedef struct
{
char *ch;
int length;
}HString;

int StrAssign(HString &T,char *chars)
{
if(T.ch)
{
free(T.ch);
T.ch=0; T.length=0;
}

if (!chars || (*chars == '\0')) return 0;
char *c=chars;
int i;
// 循环的终止条件为*c
for(i=0;*c;++i,++c);

if (i)
{
if(!(T.ch=(char*)malloc((i + 1)*sizeof(char))))
exit(0);
for(int j=0;j<i;++j)
T.ch[j]=chars[j];
// 添加字串结束符
T.ch[i] = '\0';
T.length=i;
}
return 1;
}