c语言最后输出一堆?

设计一个函数 char *insert(char *s1, char *s2), 字符串s1为原字符串,s2为新字符串,新的字符串是在原来字符串中每两个字符之间插入一个空格, 如原来的字符串为“abcd”,新产生的字符串应为“a b c d”(注意,最后一个字符后面不要插入空格)。 函数返回新字符串的首地址。原字符串在主函数中用键盘输入方式得到,调用函数后,再输出新字符串的内容。
问一下问什么最后会出现一堆??

img

img

字符串结尾要用\0作为结束标识
将代码初始化部分改为
char b[50]={0};即可
有帮助望采纳~

p3 = insert(p1,p2)就好了

供参考:

#include<stdio.h>
char *insert(char *s1,char *s2)
{
    char *p1=s1,*p2=s2;
    while(*p1)
    {
        *p2++ = *p1++;
        if(*p1 != '\0') *p2++ = ' ';
    }
    *p2 = '\0';
    return s2;
}
int main()
{
    char a[20],b[50],*p;
    scanf("%s",a);
    p = insert(a,b);
    printf("%s\n",p);
    return 0;
}