编写函数实现字符串strcat的功能

各位大佬们,我想来问大家一个问题。
我写了这样的一串代码是编写函数实现字符串strcat的功能,但是最后运行结束后给我返回的值多了一个@值,请问各位大佬为什的会发生这样的情况,这段程序错在了哪里,谢谢大家啦?!!!

#include <stdio.h>
void fun(char *p, char *q);
main() {
char a[20], b[10];
int i;
gets(a);
gets(b);
fun(a, b);
puts(a);
}
void fun(char *p, char *q) {
int i;
while (*p++ != '\0') {
if (*p == '\0') {
for (i = 0; *q != '\0'; i++)
*(p + i) = *q++;
break;
}
}
}

img

没有正确的结束,在fun函数修改如下:

void fun(char *p, char *q) {
    int i;
        while (*p++ != '\0') {
            if (*p == '\0') {
                for (i = 0; *q != '\0'; i++)
                    *(p + i) = *q++;
                *(p+i)=0;  //添加这一句
                break;
            }
        }
}

或者:

void fun(char *p, char *q) 
{
    int i;
    while(*p!='\0')
        p++;
    while(*q!='\0')
    {
        *p = *q;
        p++;
        q++;
    }
    *p = 0;
}

修改如下:(你的代码应该是最后少了*(p+i)='\0';)

void fun(char *p, char *q) {
    int i=0;
    while (*p++ != '\0') ;
        p--;
    while(*q != '\0')
        *p++ = *q++;
     *p = '\0';
}


char a[20], b[10];
改为
char a[20]={'\0'}, b[10]={'\0'};

img


你的循环到 '\0'结束了没在新字符串的最后+'\0'