cout没有打印任何东西到控制台

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cout没有打印任何东西到控制台相关的知识,希望对你有一定的参考价值。

我正在尝试使用cout从动态分配的名为charArray的2D char数组中打印出c字符串。我要打印的片段在这里:

for(int k=0; k<intSize; k++)
{
    std::cout<<"hello"<<std::endl;
    std::cout<<charArray[intSize-1-k]<<std::endl;
}


for(int i = 0; i<intSize; i++)
{
    delete [] charArray[i];
    std::cout<<i<<std::endl;
}
delete [] charArray;

intSizecharArray中有多少个C字符串。然而,当我运行程序时,"hello"被打印一次,没有其他打印,而不是charArray和i在第二个for循环中。我之前在代码中已经确认charArray已成功使用cout正确填充。我运行gdb尝试找到问题,并在gdb中for循环完全迭代,所以由于某种原因在第一个cout后,couts停止工作。我也尝试在每次cout之后冲洗,但仍然是同样的事情。

答案

试试这个:

#include <iostream>
int main()
{
    const char*nul = nullptr;
    std::cout << "before "<< nul << "after
";
 }

输出将是:

 before

这就是你发生的事情 - 你正在尝试打印一个nullptr字符串。 charArray[intSize-1-k]之一是null。可能读出它的界限。写一个空字符串会将badbit设置为std::cout

为避免这种情况,您可以做两件事:

  1. 在打印之前验证char*不为null。
  2. std::cout.exceptions(std::ostream::failbit);将使operator<<在违规代码行中抛出异常。调试器可以捕获异常,让您轻松找到您的错误(gdb有catch throw)。如果你有一个异常处理程序,不要忘记让它调用std::cout.clear();

以上是关于cout没有打印任何东西到控制台的主要内容,如果未能解决你的问题,请参考以下文章

在c ++中声明向量后无法打印任何内容

std::cout 不输出任何内容

PythonQt 不打印任何东西

了解汇编、nasm、x86 中的 printf 函数。我不知道为啥这段代码没有打印出任何东西

在换行符后从文件中打印出字符串

Cout 不打印号码