使用qsort - seg fault对2d数组进行排序

时间:2015-05-11 10:25:10

标签: c arrays qsort

我正在尝试对简化版本的二维字符串数组进行排序, (我不想将“nameArray”的数据类型更改为“char * nameArray [4]”)

setContentView

( 更新:更改为我直接使用值(4)而不是计算nElem。我的问题是让qsort工作。 )

2 个答案:

答案 0 :(得分:1)

比较函数的参数只是指针,而不是指针的指针。

你也不需要转换我相信,因为参数是void *,你可以将它们分配给局部变量,编译器会处理它们。

试试这个:

int cstring_cmp(const void *a, const void *b)
{
   const char *ia = a;
   const char *ib = b;
   return strcasecmp(ia, ib);
}

如果你不需要它们甚至可以去除局部变量(如果你计划在比较函数中添加更多代码,只需要它们):

int cstring_cmp(const void *a, const void *b)
{
  return strcasecmp(a, b);
}

答案 1 :(得分:0)

$array = array(1,2,4,5,7,8,9);

function closest($array, $number) {
    $array = array_flip($array);

    if(array_key_exists($number, $array)) return $number;

    $array[$number] = true;

    sort($array);

    $rendered = array_slice($array, $number, 2, true); 

    $rendered = array_keys($rendered);

    if(array_key_exists(1, $rendered)) return $rendered[1]; 

    return false;
}

print_r(closest($array, 3));