新手入门,请大神指教,如何对字符串数组用指针的形式进行排序?

编译没问题,运行不了。图片图片

你这个代码是看运气,我这里可以输出。int main()
{
char* p[4]={"asdf","xczv","df","gr"};
char* temp;
for(int i=0;i {
for(int j=0;j {
if(strcmp(p[j],p[j+1])>0)
{
temp=p[j+1];
p[j+1]=p[j];
p[j]=temp;

}
}
}
for(int i=0;i<4;i++)
{
cout<<p[i]<<endl;
}
return 0;
}
程序终止应该是在语句strcmp(p[j],p[j+1])这里,当j=3时,j+1=4,p[4]指向了一个没有处理过的内存空间。导致错误。

你给

 "afsd ",asf","asdfasd"

这几个字符串分配空间了吗?要么你就申请

 p[3][8]

问题并不在于楼上所说的分配空间,你这里也没有对常量字符串进行写操作,而是直接交换指针数组的地址。是完全OK的。
关键问题在于你越界了,当你的i=0的时候,j是从0循环到2的,比较if(strcmp(p[j], p[j+1]))的时候崩溃
for(int j = 0; j < 3 - i; j++)改为for(int j = 0; j < 3 - i - 1; j++)

2楼正解,在操作指针的时候要时刻注意指针越界的问题,操作没有处理过得内存空间