
关于c程序设计第二版(谭浩强)中的一道例题
将若干字符串按字母顺序(从小到大)输出main(){voidsort(char*name[],intn);voidprint(char*name[],intn);char...
将若干字符串按字母顺序(从小到大)输出
main()
{void sort(char*name[],int n);
void print(char*name[],int n);
char*name[]={"Follow me","BASIC","Great Wall","FORTRAN","computer design"};
int n=5;
sort(name,5);
print(name,5);
void sort(char*name[],int n)
{char*temp; //char temp[30];
int i,j,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[i])>0) k=i;
if(k!=i)
{temp=name[i]; //{strcpy(temp,name[i]);
name[i]=name[k]; //strcpy(name[i],name[k]);
name[k]=temp;} //strcpy(name[k],temp);}
}
}
void print(char*name[],int n)
{int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
我要问的是:改成注释后的语句,程序为什么出错了? 展开
main()
{void sort(char*name[],int n);
void print(char*name[],int n);
char*name[]={"Follow me","BASIC","Great Wall","FORTRAN","computer design"};
int n=5;
sort(name,5);
print(name,5);
void sort(char*name[],int n)
{char*temp; //char temp[30];
int i,j,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[i])>0) k=i;
if(k!=i)
{temp=name[i]; //{strcpy(temp,name[i]);
name[i]=name[k]; //strcpy(name[i],name[k]);
name[k]=temp;} //strcpy(name[k],temp);}
}
}
void print(char*name[],int n)
{int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
我要问的是:改成注释后的语句,程序为什么出错了? 展开
2个回答
展开全部
全部换成注释后的语句,运行没有问题啊,你是不是忘记换//char temp[30]这个了
更多追问追答
追问
没有忘记char temp[30]
在c-free4运行的,编译通过,应用程序错误
你确信在编译器中运行了吗
追答
当然运行了
Follow me
BASIC
Great Wall
FORTRAN
computer design
请按任意键继续. . .
不过我把函数声明转到main()外边了
#include
#include
void sort(char*name[],int n);
void print(char*name[],int n);
void main()
{
char*name[]={"Follow me","BASIC","Great Wall","FORTRAN","computer design"};
int n=5;
sort(name,5);
print(name,5);
}
void sort(char*name[],int n)
{//char*temp;
char temp[30];
int i,j,k;
for(i=0;i0) k=i;
if(k!=i)
{//temp=name[i];
strcpy(temp,name[i]);
// name[i]=name[k];
strcpy(name[i],name[k]);
// name[k]=temp;}
strcpy(name[k],temp);}
}
}
void print(char*name[],int n)
{int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
name 是一个char*,并非string,strcpy对之无效。你要转换为string后操作才行。
追问
谢谢
但是你错了
追答
char *常量之间进行strcpy是有问题的。特别是常量确定之后大小是不会变的,你这样copy,长的和短的匹配问题,你觉得不会出问题吗?char*你声明为指针,就用指针的一套来做,如果想那样做,最好给每个常量赋予足够的长度来进行拷贝操作,你那样做,最好是把每个char*都声明为 char【30】。要不然,程序是不会知道你想做什么的。
再牛的编译器也不会敢直接篡改char*常量的长度,如果别人后面是别的数据了,编译器改变后肯定会改变别人的值,这是不可能的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询