【发布时间】:2012-07-02 23:48:26
【问题描述】:
在 K&R 第 8 章中,它具有 putc 和 getc 函数的自定义实现。在getc的第一个定义中,如果参数是stdin,根据_iob的定义,函数会尝试写入地址0,因为这是_iob[0].ptr和_iob[0].base的值分配的。这合法吗?
_iob的定义:
FILE _iob[20] = {
{0, (char *) 0, (char *) 0, _READ, 0},
{0, (char *) 0, (char *) 0, _WRITE, 0},
{0, (char *) 0, (char *) 0, _WRITE, 0}
};
【问题讨论】:
-
您为什么不在问题中发布代码并告诉我们您使用的是什么版本的书?我想这里不是每个人都有一本方便理解你在说什么的书。
-
如果以后有任何此类问题,请在 cm.bell-labs.com/cm/cs/cbook/2ediffs.html> 找到 K&R2 的勘误页 - 至少有。现在好像下架了。谷歌缓存有它。 (省略大量 URL)如果您发现任何尚未发现的错误,C 编程世界将会震惊。毕竟它被称为我们的圣经。我们已经努力研究过了。
-
cm.bell-labs.com 网站现已备份,但链接仍然无效。又来了:cm.bell-labs.com/cm/cs/cbook/2ediffs.html
-
@AlanCurry 是
putc(x, p)的实现吧?不应该是getc()的“对立面”吗?