按字母顺序对C中的字符串指针进行排序时出现分段错误

时间:2017-11-01 18:16:30

标签: c arrays sorting

说我想按字典顺序对一个数组**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;
        }
    }

当然,我也在循环使用它。但是,每次尝试排序时,都会出现分段错误。我不排序时打印很好。什么可能导致排序失败?

1 个答案:

答案 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;
    }
}