以升序排序的字符串出现乱码

时间:2018-08-31 10:52:45

标签: c

我正在研究c编程语言,并希望按升序对字符串进行排序。这是C代码:

/* string sorted in ascending order */
#include <stdio.h>
#include <string.h>
void sort(char *name[],int n); 
int main()
{
    char *name[]={"Zai","Demo","CS","Apple"};
    int i,n=4;
    sort(name,n); // call sort function
    for(i=0;i<n;i++)
    {
       printf("%s\n",name[i]); 
    }
}
void sort(char *name[],int n)
{
    char *temp;
    int i,j;
    for(i=0;i<n-1;i++)
    {      
        for(j=0;j<n;j++)
        {
            if(strcmp(name[j],name[j+1])>0) 
            {  
            temp=name[j];
            name[j]=name[j+1];
            name[j+1]=temp;
            }          
        }
    }
}

我使用以下命令:

gcc -o string_sort string_sort.c
./string_sort

但是它不起作用。这是错误的消息:

enter image description here

我该怎么办?

3 个答案:

答案 0 :(得分:0)

for(j=0;j<n;j++)必须为for(j=0;j<n-1;j++),因为否则name[j+1];将超出范围。通过此更改,它可以工作。另外,j=0;不是必需的。

答案 1 :(得分:0)

for(j=0;j<n;j++)

这条线越过数组的边界。应该是:

for(j=0;j<n-1;j++)

就像在循环中,name[j+1];j少1时,n将越界。

答案 2 :(得分:0)

#include <stdio.h>
#include <string.h>
void sort(char *name[],int n); 
int main()
{
    char *name[]={"Zai","Demo","CS","Apple"};
    int i,n=4;
    sort(name,n); // call sort function
    for(i=0;i<n;i++)
    {
       printf("%s\n",name[i]); 
    }
}
void sort(char *name[],int n)
{
    char *temp;
    int i,j;
    for(i=0;i<n-1;i++)
    {      
        for(j=0;j<n-1-i;j++) //change at this line
        {
            if(strcmp(name[j],name[j+1])>0) 
            {  
            temp=name[j];
            name[j]=name[j+1];
            name[j+1]=temp;
            }          
        }
    }
}