我试图对使用指针指针实现的字符串数组进行排序。我正在使用的代码是:
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--;
}
}
}
名称已初始化,并在另一种方法中填充了7个名称。我在这一行得到了一个段错误
names[k] = names[k-1];
names[k-1] = temp;
但我不确定为什么。我在while循环的第一次迭代后得到seg错误,并且k递减到0.它永远不会返回到for循环再次递增i和k。有人可以解释我为什么会遇到seg故障以及如何修复它?
答案 0 :(得分:2)
(strcmp(names[k],names[k-1]) < 0) && (k > 0)
错了。正确的形式是
(k > 0) && (strcmp(names[k],names[k-1]) < 0)
序列很重要,因为当names[k-1]
为零时k
不安全。 &&
始终首先计算其左操作数,并且只在左边是true
时才计算其右操作数