自己写的strcat函数,该怎么处理

自己写的strcat函数
#include<stdio.h>
#include<stdlib.h> //调用calloc函数 


char* Strcat(char *s1,char *s2) //将s2指针指向的字符串连接到s1指针指向的字符串后 
{
for(;*s1 =! '0';s1++); //确保s1指针指向字符串尾部‘0’处 
for(;(*s1 == '0 ') && (*s2 != '0');s1++,s2++)  
*s1 = *s2; //连接字符串
return s1;
}

char* Strcat(char *s1,char *s2);
int main(void)
{
char *str1,*str2; //定义两个字符串指针变量str1,str2 
str1 = str2 = (char*)calloc(20,sizeof(char)); //为两个变量开辟20个长度为LEN的内存空间 
gets(str1);gets(str2); //输入字符串 
str1 = char* Strcat(str1,str2);
printf("%s",*str1);
fflush(stdin); //清空标准输入流
return 0; 
}




编译器老是报错error C2062: type 'char' unexpected,我用的是VC6。求各位看看怎么回事
------解决方案--------------------

str1 = char* Strcat(str1,str2);

这种语法问题都还出现?认真看看书吧
------解决方案--------------------
两个字符串用丁相同的地址
------解决方案--------------------
str1 = char* Strcat(str1,str2);
改为
str1 = Strcat(str1,str2);

str1 = str2 = (char*)calloc(20,sizeof(char));
改为
str1 = (char*)calloc(20,sizeof(char));
str12= (char*)calloc(20,sizeof(char));
------解决方案--------------------
这个代码真是漏洞百出~~

for(;*s1 =! '0';s1++);  //确保s1指针指向字符串尾部‘0’处 
这个不等于又是什么情况?

如果要自己实现经典函数可以参考这篇文章
------解决方案--------------------
为什么不参考
c:\microsoft sdk\src\crt\strcat.c
c:\program files\microsoft platform sdk for windows server 2003 r2\src\crt\strcat.c
c:\program files\microsoft visual studio\vc98\crt\src\strcat.c
c:\program files\microsoft visual studio 8\vc\crt\src\strcat.c
c:\program files\microsoft visual studio 9.0\vc\crt\src\strcat.c
c:\program files\microsoft visual studio 10.0\vc\crt\src\strcat.c
呢?