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;
};
它显示运行时错误。
答案 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];