我实在是找不出是哪错了,求帮忙

小弟我实在是找不出是哪错了,求帮忙
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define OK 1
#define ERROR 0
typedef struct
{
char * ch;
int length;
}HStr;
void ViewStr(HStr A)   //浏览当前字符串内容
{
for(int i=0;i<A.length;i++)
printf("%c",A.ch[i]);
printf("长度为:");
printf("%d\n",A.length);
printf("\n");
}
int StrAss(HStr & T) //新建
{
printf("请输入:");
char c;int i=0;
T.ch=(char *)malloc(sizeof(char));
for(i=0;(c=getchar())!='#';i++)
{
T.ch[i]=c;

}
T.length=i;
printf("输入的字符为:");
ViewStr(T);
return OK;
}
void StrLength(HStr A)   //长度
{
if(A.ch)
printf("字符串长度为:%d\n",A.length);
else printf(" 错误\n");
}
int EmpStr(HStr A)   //判断串是否为空
{
if(A.ch) return OK;
else return ERROR;
}
int StrCopy(HStr &T,HStr S)   //两串复制
{
S.ch=(char *)malloc(T.length * sizeof(char));
if(!S.ch) return OVERFLOW;
for(int i=0;i<T.length;i++)
{
S.ch[i]=T.ch[i];
}
return OK;
}
int StrCompare(HStr T)  //串比较
{
printf("新建需要比较的字符串\n");
HStr S;
StrAss(S);
for(int n=0;n<T.length&&n<S.length;n++)
if(S.ch[n]!=T.ch[n]) return S.ch[n]-T.ch[n];
return S.length-T.length;
}
void ClearStr(HStr &T)  //清空串
{
if(T.ch) {free(T.ch); T.ch=NULL;}
}
int Concat(HStr T)  //连接两个串
{
HStr S;HStr A;
printf("请输入要连接的字符串:");
StrAss(S);int i,n;
A.ch=(char *)malloc((T.length+S.length)*sizeof(char));
for(i=0,n=0;i<(T.length)||n<S.length;i++,n++)
{
A.ch[i]=T.ch[i];
A.ch[T.length+n]=S.ch[n];
}
A.length=T.length+S.length;
//for(int n=0;n<S.length;n++)
//{
// A.ch[T.length+n]=S.ch[n];
//}
printf("连接后的串是:\n");
ViewStr(A);
return OK;
}
int SubStr(HStr A)   //取出从pos位开始len长度的子串
{
HStr Sub;
int pos;int len;
printf("请输入从第几位开始:");
scanf("%d",&pos);
printf("请输入取出的长度:");
scanf("%d",&len);
if(pos<1||pos>A.length||len<0||len>A.length-pos+1)
return ERROR;
// if(Sub.ch) free(Sub.ch);
if(!len){Sub.ch=NULL;Sub.length=0;}
else{
Sub.ch=(char *)malloc(len * sizeof(char));
for(int i=0;i<len;i++)
{
Sub.ch[i]=A.ch[pos+i-1];
}
Sub.length=len;
}
printf("取出的串为:");
ViewStr(Sub);
return OK;
}
//int Index()
void main()
{
HStr T;
printf("新建的字符串\n");
StrAss(T);
StrLength(T);
if(EmpStr(T)) printf("串不为空\n");
else printf("串为空\n");
int a=StrCompare(T);
if(a=0) printf("一样大\n");
else if(a<0) printf("原串大\n");
else printf("后串大\n");
Concat(T);
SubStr(T);
system("pause");

}

------解决思路----------------------
我刚才又看了一下,你的问题是
1.主函数中 a=StrCompare(T). 
= 的意思是赋值。
==才是比较。
2.函数int StrAss有问题。


------解决思路----------------------

int StrAss(HStr & T) //新建
{
    printf("请输入:");
    char c;int i=0;
    T.ch=(char *)malloc(sizeof(char));   //这里只分配了一个字节的空间
    for(i=0;(c=getchar())!='#';i++)
    {
        T.ch[i]=c;    //要是输入多个字节就会溢出
 
    }
    T.length=i;
    printf("输入的字符为:");
    ViewStr(T);
    return OK;
}   

------解决思路----------------------
先不说别的,这句好像就有点问题吧
if(a=0) printf("一样大\n");
------解决思路----------------------
引用:
Quote: 引用:

int StrAss(HStr & T) //新建
{
    printf("请输入:");
    char c;int i=0;
    T.ch=(char *)malloc(sizeof(char));   //这里只分配了一个字节的空间
    for(i=0;(c=getchar())!='#';i++)
    {
        T.ch[i]=c;    //要是输入多个字节就会溢出
       T.ch = (char*)realloc( sizeof(char) * (i+2) );
    }
    T.ch[i] = '\0';
    T.length=i;
    printf("输入的字符为:");
    ViewStr(T);
    return OK;
}  
我实在是找不出是哪错了,求帮忙   您看看。我已经把malloc开辟的空间调成100了


当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。
所以你的情况是,输入#后,还有一个换行符存在于键盘缓冲区中。

    for(i=0;(c=getchar())!='#';i++)
    {
        T.ch[i]=c;
    }
    // 消耗掉换行符
    int ent = getchar();