在主函数中输入10个不等长的字符串。用另一个函数对它们按升序排序,然后在主函数中输出这10个已排序的字符串

#include<stdio.h>
#include<string.h>
void sort(char *s[10])
{
int i,j;
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if(strcmp(s[i],s[j])>0)
{
char *temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
}
}
int main()
{
char *str[10];
printf("Please enter ten strings:\n");
for(int i=0;i<10;i++)
{
str[i]=malloc(32);
scanf_s("%s",str[i],32);
}
sort(str);
printf("\n");
for(int i=0;i<10;i++)
{
printf("%s\n",str[i]);
free(str[i]);
}
system("pause");
return 0;
}
这是谭浩强《C语言程序设计》第五版给的答案,我的电脑编译一直过不了;另外我是非计算机专业的,没学过malloc()这样的东西,代码应该怎样改?

直接改你的程序吗?

咳咳咳,紧急修复

void sort(char* string[10])
{
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if (compare(string[j], string[j + 1]) == 1)
            {
                char* str = string[j + 1];
                string[j + 1] = string[j];
                string[j] = str;
            }
        }
    }
}

// 比较字符串大小
int compare(char* str1, char* str2)
{
    unsigned short result = 0;

    for (unsigned int turn = 0; result == 0; turn++)
    {
        //判断是否为空
        if (str1[turn] == '\0')
            result = 2;

        else if (str2[turn] == '\0')
            result = 1;

        else
        {
            //判断是否相等
            if (str1[turn] == str2[turn])
                result = 0;

            else
                result = (str1[turn] > str2[turn]) ? 1 : 2;
        }
    }

    return result;
}

            else
                result = (str1[turn] > str2[turn]) ? 1 : 2;
        }
    }

    return result;
}