为什么cout.tellp总是返回-1?

时间:2012-06-23 02:50:15

标签: c++ iostream cout

我想为C ++文本输出流提供类似标签的功能。该功能应该允许我说“记下这个位置”,然后允许多次插入操作,最后允许我说“添加足够的填充字符,以便在最初指出的位置之后结束N个字符”。

标准iostream系统似乎没有保持列位置,但我原以为我可以使用tellp()伪造它。我的假设是输出序列中两点tellp()之间的差异对应于插入字节的数量。

不幸的是,至少在我的Gnu C ++环境中,cout并不保持流位置的虚构。每次cout.tellp()来电returns -1。那是为什么?

1 个答案:

答案 0 :(得分:5)

tellp返回流中的位置,以便您可以查找它。控制台不允许搜索。此外,即使您将位置解释为“自创建以来写入流的字节数”,该数字对于光标定位也没有任何用处 - 屏幕环绕,其宽度通常是不可预测的。您只是不知道您所在的列,因为行长度是可变的。

如果您想在屏幕上进行合理的光标定位,请查看随附的ANSI终端规范和转义命令。它们允许光标位置发现和放置。

http://ascii-table.com/ansi-escape-sequences.php

通常,屏幕不是流。对于这个问题,键盘也不是:)