Firenut 2021-02-23 21:36 采纳率: 83.3%
浏览 138
已结题

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;
            }
        }
    }

    ```

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效