C语言问题简单题

来源:百度知道 编辑:UC知道 时间:2024/05/31 10:42:36
#include<stdio.h>
#include<string.h>
void sort(char *name[],int n);
void main()
{
char *p[5]={"Japan","American","China","Germany","Saudi Arabia"};
int m=5;
sort(p,m);
}
void sort(char *name[],int n)
{
int i,j;
char arr[25];
printf("排序之前为:\n");
for(i=0;i<5;i++,name++)
{
puts(*name);
}
name-=5;
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++,name++)
{
if(strcmp(*name,*(name+1))>0)
{
strcpy(arr,*name);
strcpy(*name,*(name+1));
strcpy(*(name+1),arr);
}
name-=j;
}
}
for(i=0;i<5;i++,name++)
{
puts(*name);
}

}
哪错了,运行出错,要求用指针实

strcpy(arr,*name);
strcpy(*name,*(name+1));
strcpy(*(name+1),arr);
这里会产生越界,仔细考虑一下。
还有,你从头到尾在使用name指针,比较混乱,最好保留name指针不动,另用一指针来移动,这样保证每次都会获得正确的头指,不容易产生错误。
算法没有仔细看,你自己检查一下,没有什么难度。