清除cout缓冲区(C ++)

杰里米·S。

您好,我正在编写一个简短的程序来实现Shell,但是遇到了一个不寻常的问题。由于某种原因,我无法清除std :: cout缓冲区。该程序不会打印出消息。我知道一个简单的解决方案是切换到std :: cerr,但是有没有一种方法可以使消息通过cout打印?我尝试过的事情:

  1. std::cout.flush()
  2. 在将std::endl任何内容写入标准输出之后进行插入
  3. 将anstd::flush插入输出流
  4. std::cout.setf(std::ios::unitbuf); 我发现这应该取消输出缓冲。

非常感谢您的帮助,这是我的代码:

int main()
{
    //Tryed this to unbuffer cout, no luck.
    std::cout.setf(std::ios::unitbuf);

    std::string input;

    //Print out shell prompt and read in input from keyboard.
    std::cout << "myshell> ";   
    std::getline(std::cin, input);

    //**********************************************************************
    //Step 1) Read in string and parse into tokens.
    //**********************************************************************

    char * buf = new char[input.length() + 1];
    strcpy(buf, input.c_str());

    int index = 0;
    char * command[256]; 

    command[index] = std::strtok(buf, " ");    //Get first token.
    std::cout << command[index] << std::endl;

    while (command[index] != NULL)
    {
        ++index;
        command[index] = std::strtok(NULL," ");    //Get remaining tokens.
        std::cout << command[index] << std::endl;
    }   

    std::cout.flush(); //No luck here either

    //HERE IS WHERE MY PROBLEM IS.
    std::cout << index << " items were added to the command array" << std::endl;

    delete[] buf;

    return 0;   
}
马丁·布罗德赫斯特

问题是您要循环的最后一次迭代中发送NULL,这导致UB,并且在您的情况下是jaming 在将任何东西发送到之前先检查一下,这样就可以了:coutwhilecoutNULLcout

if (command[index] != NULL) {
    std::cout << command[index] << std::endl;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

getch()和getchar()清除输入缓冲区的用法的区别?

来自分类Dev

在另一个输入请求之前清除cin缓冲区,c ++

来自分类Dev

清除键盘缓冲区

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

OpenGL:清除模板缓冲区,除了某些位?

来自分类Dev

C ++刷新缓冲区

来自分类Dev

如何清除ReplaySubject上的缓冲区?

来自分类Dev

清除缓冲区,输出名字,姓氏

来自分类Dev

什么时候需要清除scanf缓冲区?

来自分类Dev

为什么WebGL“清除”吸引前端缓冲区?

来自分类Dev

在C中的fgets()之后清除输入缓冲区

来自分类Dev

强制在scanf中清除缓冲区

来自分类Dev

为什么/何时自动清空cout缓冲区?

来自分类Dev

清除MIDI输出缓冲区

来自分类Dev

清除键盘缓冲区或阻止输入(C#控制台)

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

在金属中如何清除深度缓冲区或模板缓冲区?

来自分类Dev

C缓冲区指针

来自分类Dev

在C#中清除鼠标缓冲区

来自分类Dev

Python:清除标准输入缓冲区

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

如何清除Neovim缓冲区

来自分类Dev

需要一个用于延迟而不清除C语言缓冲区的函数

来自分类Dev

Tmux,禁用缓冲区清除功能

来自分类Dev

缓冲区溢出 C

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

在 C++ 中清除空输入缓冲区的安全操作

来自分类Dev

如何让 cout 缓冲区在 ubuntu 上刷新