1

嗨我有一个大问题:我们在 C++/Qt 4.8.4 /Qt Creator 2.8.1 年前创建了一个程序,在执行时运行另一个可执行文件(用 FORTRAN 编写和编译)。一切运作良好。

我们用新版本的 Visual Studio 重新编译了我们的 Fortran 代码,现在突然它不再工作了。我查看了我的 C++-Code 并找到了程序崩溃的位置:

  std::string Executable = ApplicationName.toStdString();

  bool RunOK=  system((Executable+" > "+"X.out2").c_str());
  QString  ExeName =  (Executable+" > "+"X.out2").c_str();
  QString tf = QString::number(qweee);

  if(system((Executable+" > "+"X.out2").c_str()))
  {
       msg.showMessage("msg.showMessage("An XXX error occured during calculation......((Executable+ > +X.out2).c_str(): "+ExeName +"......(system((Executable+ > +X.out2).c_str()): "+ QString::number(RunOK));
            if(QFile(OutputFiles[0]).exists())
                QFile(OutputFiles[0]).remove();
   }

不知何故system((Executable+" > "+"X.out2").c_str())变得真实,这在以前没有发生过。

这似乎发生在c_str -command 或system() -command 中。

我们之前有一些缺失的 dll 问题。这是另一个 dll 问题吗?如果是,是哪个?

有人可以帮助我们吗?

谢谢

4

1 回答 1

0

的返回值system是一个整数,而不是布尔值。它的值仅针对一种非常特殊的情况定义,system(nullptr)。这不是这里的情况。因此,您是否获得零或非零结果取决于您的特定 C++ 实现,这确实发生了变化。(“新视觉工作室版本”)。你不能依赖非零意味着错误

c_str()根本不是嫌疑人。

于 2018-07-26T13:31:18.243 回答