c语言:输入3个字符串,按由小到大的顺序输出,为什么输出有问题

#include <stdio.h>
#include <string.h>
int main(){
void change(char *,char *);
char a[]="you";
char b[]="love";
char c[]="l";
    if(strcmp(a,b)>0)change(a,b);
    if(strcmp(a,c)>0)change(a,c);
    if(strcmp(b,c)>0)change(b,c);
    printf("%s%s%s",a,b,c);
    return 0;
}

void change(char *p1,char *p2){
    char p[50];
    strcpy(p,p1);
    strcpy(p1,p2);  
    strcpy(p2,p);       
}

输出结果为:l love 为什么少了you???

函数申明没有问题,只是这种写法有些老,不建议这么写。
char a[]="you";
char b[]="love";
char c[]="l";
这里字符串的长度是固定的,a是4,b是5,c是2,当你change的时候,c容纳不下a或者b,b容纳不下a
你可以
char a[5]="you";
char b[]="love";
char c[5]="l";