关于字符串数组qsort排序中问题

我的IDE是codeblocks,内置编译器是gcc。win7 64bit。

如下:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <exception>
#include <algorithm>

using namespace std;

int cmp(const void* a,const void* b)
{
    return strcmp(*(char **)a,*(char**)b);
}

int main()
{
    char ss[5][20] = {"hello","world","a","b","aa"};

    char** s = (char **)new char[5];
    for(int i=0;i <5;++ i)
    {
        s[i] = new char[20];
        strcpy(s[i],ss[i]);
    }

    puts("before sort:");
    for(int i=0;i <5;++ i) printf("%s\n",s[i]);

    qsort(s,5,sizeof(char *),cmp);
      puts("after sort:");
    for(int i=0;i <5;++ i) printf("%s\n",s[i]);


    return 0;
}

上面一旦使用了char**开辟字符串数组就必须用sizeof(char )和(char **),但是用char[][]初始化之后的数组又必须用sizeof(s[0])和(char *),这里面的原因是什么?char[][]不是按照数组名编译器当成指针来用的原则吗?

2个回答

字符串数组qsort排序......
答案就在这里:字符串数组qsort排序
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

你这里写错了

  char** s = (char **)new char[5];

    --->

    char** s = new char* [5];

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!