对链接的字符串列表

时间:2016-08-17 15:14:46

标签: 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;
};

它显示运行时错误。

2 个答案:

答案 0 :(得分:5)

char *str; ... strcpy(str,x->name);name指向的数据复制到 someplace (它是未定义的行为),因为str是未初始化的指针。

只需交换指针。

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

答案 1 :(得分:0)

char *str; 此语句仅创建指针。没有与之相关的记忆;

strcpy(char* dest, char* src)只需将 src 指向的内存中的内容复制到内存点 dest

在您的情况下 str不指向任何内存位置;

strcpy(str, x->name)

因为 str指向什么,所以此语句最终会出错,因为strcpy无法复制到str

而不是char* str; 使用char str[SIZE_MAX];