有一棵二叉树。其中的节点是char * data;在输入上 - 来自文件 (str) 的行。节点 - 字(数据)。char * 我写的数据:
while (fgets(str, 800, LP))
{
int i = 0;
int size = strlen(str);
while (i<size)
{
char *tmp = (char *)calloc(80, sizeof(char));
int j = 0;
while ((str[i] >= 'А' && str[i] <= 'Я') || (str[i] >= 'а' && str[i] <= 'я'))
tmp[j++] = tolower(str[i++]);
i++;
if (strlen(tmp) > 2) {
root = AddNode(tmp, root);
}
}
}
好吧,实际上,由于显而易见的原因,我只得到树中的一个元素作为输出,因为每次指向 tmp 字符串的指针都有一个新值
但这里是如何修复它以保留树结构(即节点仍然有一个 char * 数据字符串)
如果我理解正确,那么你只需要更换线
行复制字符串
strdupinside 将调用malloc,分配足够的内存并将字符串复制到那里。有必要通过习惯性的方式释放这些内存free(tmp);strdup源代码将告诉您这一切是如何发生的(它实际上是用旧 C 语言编写的。
当然,你可以用钢笔写选抄,但为什么呢?
是的,最重要的是,不要忘记更正这条线
并根据需要添加免费电话。
更新
从评论中提取的代码
必须了解两件事。视图构造
char * tmp = str;不复制字符串,而只复制指针(即,很可能是 4 个字节)。之后,两个指针指向同一个内存区域。其次,strtok修改原始字符串。