大大洪大大
2016-06-03 01:54
采纳率: 100%
浏览 1.4k
已采纳

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • kingnle 2016-06-03 02:14
    已采纳

    你这个代码是看运气,我这里可以输出。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]指向了一个没有处理过的内存空间。导致错误。

    打赏 评论
  • 「已注销」 2016-06-03 02:07

    你给

     "afsd ",asf","asdfasd"
    

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

     p[3][8]
    
    打赏 评论
  • 小灸舞 2016-06-03 02:20

    问题并不在于楼上所说的分配空间,你这里也没有对常量字符串进行写操作,而是直接交换指针数组的地址。是完全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++)

    打赏 评论
  • qq_23466301 2016-06-03 02:39

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

    打赏 评论

相关推荐 更多相似问题