繁体   English   中英

cout 不向控制台打印任何内容

[英]cout not printing anything to console

我正在尝试使用cout从名为charArray的动态分配的二维字符数组中打印出 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;

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

尝试这个:

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

输出将是:

 before

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

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

  1. 在打印之前验证char*不为空。

  2. std::cout.exceptions(std::ostream::failbit); 将使operator<<在有问题的代码行抛出异常。 调试器可以捕获异常,并让您轻松找到错误(gdb 有catch throw )。 如果你有一个异常处理程序,不要忘记让它调用std::cout.clear(); .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM