编译没问题,运行不了。
你这个代码是看运气,我这里可以输出。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楼正解,在操作指针的时候要时刻注意指针越界的问题,操作没有处理过得内存空间