搜索内容

有一个问题?

如果您有任何疑问,可以在下面询问或输入您要寻找的!

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

技术聚客 未结 2 834
weixin_51607490
weixin_51607490 2021-02-24 05:22

#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条回答
  • 2021-02-24 06:12

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

    ```

    0 讨论(0)
  • 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;
            }
        }
    }

    0 讨论(0)
提交回复