将指针排序为指针
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
时才计算它的右操作数
我正在尝试对使用指向指针的指针实现的字符串数组进行排序。我使用的代码是:
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