关于#c语言#的问题,请各位专家解答!主要是自定义函数里的puts(a)为什么输出不了

#include<stdio.h>
void sm(char *a,char *b)
{
    while(*a)
    a++;
    while(*b)
    *a++=*b++;
    *a='\0';
    puts(a);
}
int main()
{
    char str1[1000],str2[1000];
    char *p1,*p2;
    gets(str1);
    gets(str2);
    p1=str1;
    p2=str2;
    sm(p1,p2);
    return 0;
}

这样就行了

#include <stdio.h>
void sm(char *a, char *b)
{
    char *t = a;
    while (*a)
        a++;
    while (*b)
        *a++ = *b++;
    *a = '\0';
    puts(t);
}
int main()
{
    char str1[1000], str2[1000];
    char *p1, *p2;
    gets(str1);
    gets(str2);
    p1 = str1;
    p2 = str2;
    sm(p1, p2);
    return 0;
}



#include<stdio.h>
void sm(char* a, char* b)
{
    char* c = a;
    int i = 0;
    while (*a)
    {
        c[i] = *a;
        a++;
        i++;
    }
    while (*b)
    {
        c[i] = *b;
        b++;
        i++;
    }
    c[i] = '\0';
    puts(c);
}
int main()
{
    char str1[1000], str2[1000];
    char* p1, * p2;
    gets_s(str1);
    gets_s(str2);
    p1 = str1;
    p2 = str2;
    sm(p1, p2);
    return 0;
}

因为第9行 puts(a); 这时候指针a是指向字符串的结尾的结束符 ‘\0'.
这个输出可以放到主函数里第19行之后,puts(p1);

字符串指针a已经移到字符串结尾,另外a指向'\0',你要输出什么?

应该是sm(str1,str2);
还有字符串不能用=来复制,得用strcpy(str1,p1),p1复制到str1