#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define OK 1
typedef struct {
char * ch;
int length;
}HString;
typedef char Status;
Status StrAssign(HString &T,char * chars){
int i,j;char * c;
if(T.ch) free(T.ch);
for(i=0,c=chars; c; ++i,++c);
if(!i){
T.ch=NULL;T.length=0;
}
else{
if(!(T.ch=(char *)malloc(i*sizeof(char)))) exit(OVERFLOW);
for(j=0;j<=i-1;j++)
T.ch[j]=chars[j];
T.length=i;
}
return OK;
}
Status Concat(HString &T,HString S1,HString S2){
int i;
if(T.ch) free(T.ch);
if(!(T.ch=(char *)malloc((S1.length+S2.length)*sizeof(char)))) exit(OVERFLOW);
for(i=0;i<=S1.length-1;i++)
T.ch[i]=S1.ch[i];
T.length=S1.length+S2.length;
for(i=0;i<=S2.length-1;i++)
T.ch[i+S1.length]=S2.ch[i];
return OK;
}
void main(){
HString T,S1,S2;int i;
char *a="abcdefghijklmnopqrstuvwxyz",*b="0123456789";
StrAssign(S1,a);
StrAssign(S2,b);
Concat(T,S1,S2);
for(i=0;i<=T.length;i++)
printf("%c",T.ch[i]);
}
这是我编的,用VC运行,没有错误,但是不能执行啊!!!!!
就是连接abcdefghijklmnopqrstuvwxyz和0123456789的算法
追答不懂,直接打abc....56789不是连接在一起了吗。
追问所以才要用Concat函数连接啊
追答Status StrAssign(HString &T,char * chars){
int i,j;char * c;
if(T.ch) free(T.ch);
for(i=0,c=chars; c; ++i,++c); //条件恒成立指针不为空,死循环,改为 *c != '\0'
if(!i){
T.ch=NULL;T.length=0;
}
else{
if(!(T.ch=(char *)malloc(i*sizeof(char)))) exit(OVERFLOW);
for(j=0;j<=i-1;j++)
T.ch[j]=chars[j];
T.length=i;
}
return OK;
}
那不是死循环,后面有分号的。
追答for(i=0,c=chars; c; ++i,++c); //后面有分号跟循环条件没关系,循环条件c恒为真。