关于函数的间接寻址问题

indirect addressing problem about functions

strcat(s,t) 将字符串t复制到s的末尾,以下为初始代码

void strcat(char s[], char t[])
{
    int i, j;

    i = 0;
    j = 0;
    while (s[++i] != '[=10=]');
    while ((s[i++] = t[j++]) != '[=10=]');
}

#define MaxSize 100
int main()
{
    char str1[MaxSize] = { 'a','b','c','d' };
    char str2[MaxSize] = { 's','s' };
    strcat(str1, str2);
    printf("%s", str1);
    return 0;
}
  1. 系统告诉我“strcat”之间的不同级别的间接寻址:“void (char *,char *)”“char *(char *,const char *)”。这是第一个为什么?
  2. 我从void strcat(char s[], char t[])更改为void* strcat(char s[], char t[])后没有错误。所以这意味着我只能使用指针 void* 传递 str1 return 类型的地址 char*,但是我不能用strcat(char s[], char t[])的参数s,t修改str1[=29的内容=].如果我认为是对的,那就是第二个 why

非常感谢你们,我应该更改函数名称。例如void strcat(char s[], char t[]) 应修改为 void mystrcat(char s[], char t[]) .
我想使用我自己的 strcat 版本,但忘了它违反了 C 语言规范。因为我写了代码 # include< string.h>。 在我意识到这个问题后, void strcat(char s[], char t[])void strcat(char s [], char t[]) 都可以.