【发布时间】:2019-05-05 00:15:40
【问题描述】:
假设我有。
char c[500];
我为我的作业编写了以下函数: (基本上是一棵树,中缀顺序,如果左节点存在,则将 0(1 表示右)写入缓冲区 i 位置,否则写入 '\0' 并打印缓冲区)。
void imprimer_codes (node *b, char *c, int i) {
assert(c);
if (!b) return;
if (est_feuille(b)) {
c[i] = '\0';
printf("%s:%c\n",c,b->symbol);
}
if (b->fg) {
c[i] = '0';
imprimer_codes(b->fg,c,i+1);
}
if (b->fd) {
c[i] = '1';
imprimer_codes(b->fd,c,i+1);
}
}
因为我正在递归地使用它。我不明白该函数如何实际打印多个不同的缓冲区,因为缓冲区中有多个 \0。
是否将指向 c[500] 的指针复制到堆栈内存中?这可能是我能找到的唯一解释。
【问题讨论】:
-
请发一个完整的代码。
-
我认为您递归使用它并且尝试将字符存储到缓冲区中这一事实有点棘手。想象一下你有` i = 5` 它可以输入
if (b->fg)和if (b -> fd)然后两者都可以写在c[5]也许这是你想要考虑的事情。你\0... 也会发生同样的行为 -
est_feuille是is_leaf的法语,所以我想这意味着没有子节点了 -
我猜
fg和fd代表左右分支(g = gauche = left, d = droit = right) -
现在是开始使用调试器的好时机。您可以单步执行您的代码并查看您的进展情况...
标签: c string recursion memory stack