gpt4 book ai didi

c - 将文本文件中的单词插入到 C 树中

转载 作者:行者123 更新时间:2023-12-03 03:16:33 25 4
gpt4 key购买 nike

过去两天我遇到了一个奇怪的问题,但我还无法解决它。我正在尝试从 2 个文本文件中获取单词并将这些单词添加到树中。我选择的获取单词的方法引用这里: Splitting a text file into words in C .

我用来将单词插入树的函数如下:

void InsertWord(typosWords Words, char * w)
{
int error ;
DataType x ;
x.word = w ;
printf(" Trying to insert word : %s \n",x.word );
Tree_Insert(&(Words->WordsRoot),x, &error) ;
if (error)
{
printf("Error Occured \n");
}
}

正如发布的链接中提到的,当我尝试将文本文件中的单词导入到树中时,我收到“发生错误”。再次说明该功能:

<小时/>

文本文件:

一个

啊啊

啊啊啊

<小时/>
char this_word[15];
while (fscanf(wordlist, "%14s", this_word) == 1)
{
printf("Latest word that was read: '%s'\n", this_word);
InsertWord(W,this_word);
}

但是当我用以下方式插入完全相同的单词时,它工作得很好。

    for (i = 0 ; i <=2 ; i++)
{
if (i==0)
InsertWord(W,"a");
if (i==1)
InsertWord(W,"aaah");
if (i==2)
InsertWord(W,"aaahh");
}

这证明树的功能工作正常,但我无法理解当时发生了什么。我连续调试了两天,仍然无法弄清楚。有什么想法吗?

最佳答案

当您使用以下方式阅读单词时

char this_word[15];
while (fscanf(wordlist, "%14s", this_word) == 1)
{
printf("Latest word that was read: '%s'\n", this_word);
InsertWord(W,this_word);
}

您总是为字符串重复使用相同的内存缓冲区。这意味着当您这样做时

x.word = w ;

您始终存储相同的地址。每次读取都会重新定义所有已存储的字,基本上会破坏数据结构。

尝试更改 char this_word[15];char *this_word;并放置一个 this_word = malloc(15); in the beggining of the while` 循环,使其为每次迭代分配一个新的缓冲区。所以看起来像

char *this_word;
while (fscanf(wordlist, "%14s", this_word) == 1)
{
this_word = malloc(15);
printf("Latest word that was read: '%s'\n", this_word);
InsertWord(W,this_word);
}

正如 Michael Walz 所建议的,strdup(3) 也可以解决眼前的问题。

当然,您还需要释放 .word完成树后的元素。

关于c - 将文本文件中的单词插入到 C 树中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37323785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com