将指针排序为指针

Sort pointer to pointer

我正在尝试对使用指向指针的指针实现的字符串数组进行排序。我使用的代码是:

void sort(){
  char** names;
  for(int i = 1; i < size; i++){
    int k = i;
    while((strcmp(names[k],names[k-1]) < 0) && (k > 0)){
      char* temp;
      temp = names[k];
      names[k] = names[k-1];
      names[k-1] = temp;
      k--;
    }
  }
}

names 已经在另一个方法中初始化并填充了 7 个名称。我在这一行遇到段错误

 names[k] = names[k-1];
 names[k-1] = temp;

但我不确定具体原因。在 while 循环的第一次迭代后我得到了 seg 错误,并且 k 递减到 0。它永远不会 returns 到 for 循环再次递增 i 和 k。有人可以解释为什么我遇到段错误以及如何修复它吗?

(strcmp(names[k],names[k-1]) < 0) && (k > 0) 是错误的。正确的形式是 (k > 0) && (strcmp(names[k],names[k-1]) < 0)

顺序很重要,因为当 k 为零时 names[k-1] 不安全。 && 总是先计算它的左操作数,只有当左操作数是 true

时才计算它的右操作数