C语言 为什么我必须在put函数中减少nt ?我还有一个角色.增加它不符合逻辑吗?



在'C Programming Language'中,作者添加了这段代码:

#define putc(c, p) (--(p->cnt) >= 0) ? 
(*p->ptr++ = c) : _flushbuf(c, p)

但是我不明白为什么我必须减少碳排放。增加它是否不合逻辑(因为我们多了一个字符)?

p->ptr++之后,p->ptr向前移动一步,因此p->cnt减小。如果不维护p->cnt,则p->ptr将被字符填充,然后溢出。

_cnt成员用于计算"左字符数"。在缓冲区中,根据前页struct _iobuf定义中的注释。对于输出流,这意味着缓冲区中剩余的空间字节数。因此,当您向缓冲区中添加另一个字符时,可用空间就少了一个字符。

对于getc来说,这对输入流是有意义的,而_cnt则计算缓冲区中数据的剩余字符数。

如果您试图在具有非空缓冲区的同一流上混合getcputc调用,则此实现将不起作用。但是,C语言要求在读写之间调用fflush,这样可以避免这个问题。

相关内容

最新更新