getline和控制字符

std::getline and control characters

本文关键字:控制字符 getline      更新时间:2023-10-16

如果我这样做了:

std::string buffer;
std::getline(std::cin, buffer);

尽管libreadline提供了许多细节,但我仍然可以使用退格和ENTER来输入字符串。我不确定处理这些控制字符是谁的责任。它是输入流std::cin,是底层控制台设备,还是std::getline本身?

我不确定处理这些控制字符是谁的责任。它是输入流std::cin,是底层控制台设备,还是std::getline本身?

这是控制台/终端/诸如此类的东西。如果你通过管道给进程提供一个字符串,你应该收到,例如b (backspace)。

这是终端设备(控制台)。

一个典型的终端将提供:

  • 缓冲(程序接收整行)
  • 简单的行编辑(至少退格和输入,可能的行召回和光标键编辑)
  • 回显(您可以看到您输入的内容)。

所提供的确切功能取决于您的终端的操作系统和功能集。如果您重定向标准输入,那么所有这些特征通常都会消失,并且控制字符会直接传递。