这个异常该如何该?error C2664: 'strcpy' : cannot convert parameter 1 from 'char (*)[256]

这个错误该怎么该??error C2664: 'strcpy' : cannot convert parameter 1 from 'char (*)[256]
error C2664: 'strcpy' : cannot convert parameter 1 from 'char (*)[256]' to 'char *'
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
# include <stdio.h>
# include <string.h>
# define MAXSTRLEN 255
typedef char sstring[MAXSTRLEN+1];
void Concat(sstring *T,sstring s1,sstring s2)//连接两个字符串
{

int i,j=0;
if(s1[0]+s2[0]<=MAXSTRLEN){//第一种情况。当两个字串之和小于新串市
strcpy(T,s1);
strcat(T,s2)
T[0]=s1[0]+s2[0];
}
else if(s1[0]<MAXSTRLEN && s1[0]+s2[0]>MAXSTRLEN)//第二种情况。当两个子串之和大于总串,可是第一个子串小于新串
{
strcpy(T,s1);
j=s1[0];
for(i=1;i<MAXSTRLEN-j;i++){
strcat(T,s2[i]);
j++;
}
T[0]=j;
}
else//当第一个子串小于等于新串时
{
for(i=0;i<=MAXSTRLEN;i++)
strcpy(T,s1);
T[0]=s1[0];
}
}
void Strprint(sstring T)//输出字符串
{
int i;
for(i=1;i<=T[0];i++)
printf("%c",T[i]);
}
void Destroystring(sstring *T)//释放字符串的空间
{
free(T);
}
void main()
{
sstring T;//定义三个串
sstring s1;
sstring s2;
printf("请输入字符串s1:");
for(i=1;s1[i]!='1';i++)
scanf("%c",&s1[i]);
s1[0]=i-1;
for(i=1;s2[i]!='1';i++)
scanf("%c",&s2[i]);
s2[0]=i-1;
Concat(&T,s1,s2);//连接
Strprint(T);//输出
Freestr(&T);
}

error C2664: 'strcpy' : cannot convert parameter 1 from 'char (*)[256]' to 'char *'
  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

------解决方案--------------------
调用函数需要清楚参数类型

strcpy 需要的字符指针类型

C/C++ code
strcpy(*T,s1);
strcat(*T,s2)
*T[0]=s1[0]+s2[0];

------解决方案--------------------
typedef char sstring[MAXSTRLEN+1];
这里是定义了char型数组的一个同义词sstring, 该数组的大小为MAXSTRLEN+1;
实际上
sstring T;
等价于
char T[MAXSTRLEN+1];
同理:
sstring *T;
等价于char (*T)[MAXSTRLEN+1];
------解决方案--------------------
typedef char sstring[MAXSTRLEN+1];
你的sstring已经是char*类型了,不需要用sstring*类型了。
------解决方案--------------------
typedef char sstring[MAXSTRLEN+1];
你的sstring已经是char*类型了,不需要用sstring*类型了。
------解决方案--------------------
char *strcpy(char *s1,const char *s2);