c - 对字符串链表进行排序时出现运行时错误

标签 c string sorting linked-list

void sort(struct node **s2) {
    struct node *x, *y;
    x = *s2;
    char *str;
    while (x != NULL) {
        y = x->n;
        while (y != NULL) {
            if (strcmp(x->name, y->name) > 0) {
                strcpy(str, x->name);
                strcpy(x->name, y->name);
                strcpy(y->name, str);
            }
            y = y->n;
        }
        x = x->n;
    }
}

这显示了运行时错误。 我不知道怎么了 我相信排序是正确的 是选择排序 我的节点结构是:

struct node {
    char *name;
    struct node *n;
};

它显示运行时错误。

最佳答案

字符 *str; ... strcpy(str,x->name);name 指向的数据复制到 某个地方(这是未定义的行为)作为 str 是一个未初始化的指针。

只是交换指针。

       if (strcmp(x->name,y->name) > 0) {
         char *temp = x->name;
         x->name = y->name;
         y->name = temp;
       }

关于c - 对字符串链表进行排序时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39000450/

相关文章:

执行shell管道和重定向的C程序

c - 不确定这行代码在 C 中意味着什么

c - 扫描输入字符串并将单词存储在 C 数组中

javascript - 将 sortable.js 与 HTML 自定义数据属性结合使用

c - 分析 IEEE 754 位模式

c - 指针和字符

java - 无法在带有 ^(插入符号)符号的字符串上使用 String.split

javascript - string.replace 中的正则表达式带有回调函数

MySQL,按列排序,包含英语和其他语言(希伯来语)的字符串

algorithm - 对只有 3 个元素的 int 数组进行排序