我现在正在使用二进制搜索树,由于某种原因,这个循环甚至都不会启动。我们已经尝试了各种方法来测试它是strlen()的问题,还是数据类型问题。
ElementType是char *。
void sortinsert(Node **root, ElementType str)
{
int i, j;
char temp;
char copy[100];
strcpy(copy, str);
int k = strlen(str);
printf("%d", k);
for (i = 0; i < k; i++) {
/*printf("%s", str);
printf("%c", *str);*/
printf("%d", i);
for (j = 0; j < strlen(str) - i; j++) {
if (str[j] > str[j + 1]) {
temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
Node *p = (Node *)malloc(sizeof(Node));
p->data = (char*)malloc(sizeof(char)*strlen(copy));
p->sig = (char*)malloc(sizeof(char)*strlen(str));
strcpy(p->sig, str);
strcpy(p->data, copy);
p->left = NULL;
p->right = NULL;
p->next = NULL;
Node *rootbackup;
if ((*root) == NULL) {
(*root) = p;
}
else {
rootbackup = *root;
if (strcmp((*root)->data, copy) > 0) {
sortinsert(&(*root)->left, copy);
}
else
{
if (strcmp((*root)->data,copy) < 0)
sortinsert(&(*root)->right, copy);
}
*root = rootbackup;
}
}
答案 0 :(得分:1)
如果字符串大小大于0,则循环实际开始。但是存在未定义的行为,因为您应该为终止0分配内存:
p->data = (char*)malloc(sizeof(char)*strlen(copy)+1);
p->sig = (char*)malloc(sizeof(char)*strlen(str)+1);
以下是没有&#34; + 1&#34;在malloc: