首页 > 解决方案 > 重新编译我们的 FORTRAN 代码并在 C++ 中使用它后,我们的 system() 或 c_str() 命令无法正常工作

问题描述

嗨我有一个大问题:我们在 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 问题吗?如果是,是哪个?

有人可以帮助我们吗?

谢谢

标签: c++systemexecutablec-str

解决方案


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

c_str()根本不是嫌疑人。


推荐阅读