0

我正在学习 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

但它不能工作。这是错误:

在此处输入图像描述

我应该怎么办?

4

3 回答 3

0

for(j=0;j<n;j++)必须是for(j=0;j<n-1;j++)因为否则name[j+1];将超出范围。有了这个改变,它就起作用了。另外,j=0;也不是必须的。

于 2018-08-31T10:57:33.130 回答
0
for(j=0;j<n;j++)

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

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

因为在循环name[j+1];中将越界 when jwill be just 1 less then n

于 2018-08-31T10:57:40.303 回答
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;
            }          
        }
    }
}
于 2018-08-31T13:45:15.893 回答