爆力火锅
2021-02-23 21:36
采纳率: 83.3%
浏览 62

c语言——五个字符串大小比较和排序(求大佬帮我看看哪里错了)

#include<stdio.h>
#include<string.h>
void sort(char **p)
{
    int i,j,k;
    char *t=NULL;
    for(i=0;i<4;i++)
    {
        k=i;
        for(j=i+1;j<5;j++)
        {
            if(strcmp(p[k],p[j])>0)    
            {
                k=j;
            }
        }
        if(k!=i)
        {
            t=p[k];
            p[k]=p[j];
            p[j]=t;
        }
    }
}
int main()
{
    char str[5][20],*pstr[5],**p;
    int i;
    printf("请输入五个字符串:\n");
    for(i=0;i<5;i++)
    {
        //gets(str[i]);
        scanf("%s",str[i]);        
        pstr[i]=str[i];            //pstr[i]存的是每个字符串首元素的地址 
    }                            //而*(p+i)存的是 pstr[i]的值,也就是字符串首元素的地址        即:printf("%s",pstr[i])<==>printf("%s",*(p+i)) 
    printf("即:\n");            
    for(i=0;i<5;i++)
    {
        printf("%s\n",pstr[i]);
    }
    p=pstr;
    sort(p);
    printf("由小到大为:\n"); 
    for(i=0;i<5;i++)
    {
        printf("%s\n",pstr[i]);
    }

图一,能正确执行

图二:执行到一半光标就卡住了~~

 

  • 收藏

2条回答 默认 最新

  • Kim_小星兴 2021-02-23 22:08
    已采纳

    ```void sort(char **p)
    {
        int i,j,k;
        char *t=NULL;
        for(i=0;i<4;i++)
        {
            k=i;
            for(j=i+1;j<5;j++)
            {
                if(strcmp(p[k],p[j])>0)    
                {
                    k=j;
                }
            }
            if(k!=i)
            {
                t=p[k];
                p[k]=p[j];     //循环执行完之后,j变量必为 5 ,p[j]读越界,导致异常退出.这里的你的本意应该是与i交换
                p[j]=t;
            }
        }
    }

    ```

    已采纳该答案
    打赏 评论
  • 小白小白你好菜 2021-02-23 23:17

    void sort(char **p)
    {
        int i,j,k;
        char *t=NULL;
        for(i=0;i<4;i++)
        {
            k=i;
            for(j=i+1;j<5;j++)
            {
                if(strcmp(p[k],p[j])>0)    
                {
                    k=j;
                }
            }
            if(k!=i)
            {
                t=p[i];
                p[i] = p[k];
                p[k] = t;
            }
        }
    }

    打赏 评论

相关推荐 更多相似问题