说我想按字典顺序对一个数组**x
进行排序,我试图使用一种排序:
char **x
for (i = 0; i < sizeof(x); i++) {
if (strcmp(x[i], x[i + 1]) > 0) {
char *temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
}
}
当然,我也在循环使用它。但是,每次尝试排序时,都会出现分段错误。我不排序时打印很好。什么可能导致排序失败?
答案 0 :(得分:0)
如果不知道数组的大小,这将无法工作。当你调用sizeof(x)时,你实际上是返回sizeof(char **),在大多数64位系统上是8,而不是数组中元素的数量。
您需要知道数组中元素的数量,而不是修改代码来执行此操作:
int x_length = <number of elements in x>
char **x
for (i = 0; i < x_length; i++) {
if (strcmp(x[i], x[i + 1]) > 0) {
char *temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
}
}