我正在尝试使用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或第二个for循环中的i。我早先已经在我的代码中确认通过成功使用charArray可以正确填充cout。我运行gdb尝试查找问题,并且在gdb中,for循环已完全迭代,因此出于某些原因,在第一个cout之后,cout停止工作。我还尝试在每个cout之后刷新,但是还是一样。

最佳答案

试试这个:

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

输出将是:
 before

这就是您正在发生的情况-您正在尝试打印nullptr字符串。charArray[intSize-1-k]之一为空。可能会无限制地阅读它。编写空字符串会将badbit设置为std::cout

为避免这种情况,您可以执行以下两项操作:
  • 在打印之前,验证char*不为null。
  • std::cout.exceptions(std::ostream::failbit);将使operator<<在有问题的代码行中引发异常。调试器可以捕获异常,并让您轻松找到错误(gdb具有catch throw)。如果您有异常处理程序,请别忘了让它调用std::cout.clear();
  • 关于c++ - cout不打印任何东西到控制台,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52165061/

    10-09 06:39
    查看更多