萌新求教。可以运行,但无法输出任何东西。

#include<stdio.h>
int main()
{
    void f(char *[]);
    int i;
    char *str[5],a[5][15];
    printf("enter strings\n");
    for(i=0;i<5;i++)
    str[i]=a[i];
    for(i=0;i<5;i++)
    scanf("%s",str[i]);
    f(str);
    for(i=0;i<5;i++)
    printf("%s ",str[i]);
    printf("\n");
    return 0;
}

void f(char *p[])
{
    int k,s;
    char *n;
    int cmp(char *q1,char *q2);
    for(s=0;s<5;s++)
    for(k=0;k<5-s;k++)
    if(cmp(p[k],p[k+1])>0)
    {
         n=p[k];
         p[k]=p[k+1];
         p[k+1]=n;
    }
}

int cmp(char *q1,char *q2)
{
    int j=0;
    for(;q1[j]!='\0'||q2[j]!='\0';j++)
    if(q1[j]!=q2[j])
    {
        if(q1[j]>q2[j])
        return 1;
        return -1;
    }
    return 0;
}
 

如果你只是想让这个排序算法运行的话,只需要把S=0改为S=1就可以了,之前没有输出的原因是因为产生了数组越界,当s=0是,会比较到str[5]的值,所以就产生越界。

#include<stdio.h>
int main()
{
    void f(char *[]);
    int i;
    char *str[5], a[5][15];
    printf("enter strings\n");
    for (i = 0; i < 5; i++)
        str[i] = a[i];
    for (i = 0; i < 5; i++)
        scanf("%s", str[i]);
    f(str);
    for (i = 0; i < 5; i++)
        printf("%s ", str[i]);
    printf("\n");
    return 0;
}

void f(char *p[])
{
    int k, s;
    char *n;
    int cmp(char *q1, char *q2);
    for (s = 1; s < 5; s++)
        for (k = 0; k < 5 - s; k++)
            if (cmp(p[k], p[k + 1]) > 0)
            {
                n = p[k];
                p[k] = p[k + 1];
                p[k + 1] = n;
            }
}

int cmp(char *q1, char *q2)
{
    int j = 0;
    for (; q1[j] != '\0' || q2[j] != '\0'; j++)
        if (q1[j] != q2[j])
        {
            if (q1[j] > q2[j])
                return 1;
            return -1;
        }
    return 0;
}