请问我的代码错在哪里,vs2019,单链表制作的学生成绩管理系统,按总分降序时出现乱码

img
void orderbytotal(struct node* phead) {
struct node* pfind1 = phead;
struct node* pfind2 = phead;
float max;
struct node* p = NULL;
struct student replace;
while (pfind1 != NULL) {
p = pfind1;
max = pfind1->data.total;
for (pfind2 = pfind1->pnext; pfind2!= NULL; pfind2 = pfind2->pnext) {
if (max < pfind2->data.total)//寻找最高分
max = pfind2->data.total;
p = pfind2;
}
p->data.total = pfind1->data.total;//交换总分
pfind1->data.total = max;

    replace.num = p->data.num;//交换学号
    p->data.num = pfind1->data.num;
    pfind1->data.num = replace.num;

    strcpy_s(replace.name, strlen(p->data.name)+ 1, p->data.name);//交换姓名
    strcpy_s(p->data.name, strlen(pfind1->data.name) + 1, pfind1->data.name);
    strcpy_s(pfind1->data.name, strlen(replace.name) + 1, replace.name);

    replace.Math = p->data.Math;//交换数学
    p->data.Math = pfind1->data.Math;
    pfind1->data.Math = replace.Math;

    replace.English = p->data.English;//交换英语
    p->data.English = pfind1->data.English;
    pfind1->data.English = replace.English;

    replace.Profession = p->data.Profession;//交换专业课
    p->data.Profession = pfind1->data.Profession;
    pfind1->data.Profession = replace.Profession;

    replace.ave = p->data.ave;//交换平均分
    p->data.ave = pfind1->data.ave;
    pfind1->data.ave = replace.ave;

    pfind1 = pfind1->pnext;
}
printf("排序完成\n");
printfStuInfo(phead);

}