为什么字符串类型导致c ++程序无法运行?

时间:2018-08-29 19:08:50

标签: c++ mingw

我有一个简单的程序,用Windows 10计算机上的C ++编写,并用MinGW g ++编译器编译。

我包含了<string>标头,并且运行正常。当包含string数据类型时,它将编译,但不会运行。

要重现的最小代码量是:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string greeting;
    cout << "hi" << endl;
    return 1;
}

请注意,可以正常工作:

#include <iostream>
#include <string>
using namespace std;

int main() {
    //string greeting;
    cout << "hi" << endl;
    return 1;
}

编译器的版本是6.3.0
g++.exe (MinGW.org GCC-6.3.0-1) 6.3.0

我3天前下载了它,因此我认为它是最新版本。 (也许不是吗?)

我已经搜索并浏览了stackoverflow以获取答案。

我找到的最接近的问题是,该人放弃了并改变了操作系统。

我发现的另一个解决方案是使用Cygwin的编译器。我宁愿不要,因为我已经有了一个看似不错的编译器。看来MinGW工具已被广泛使用,以至于我应该能够使用编译器。

任何其他论坛/博客/等资源都存在有关转换字符串或调用字符串方法的问题。

注意:使用包含的编译器,在Ubuntu 16.04上可以运行相同的精确代码。

编辑:

虽然我意识到“它不会运行”没有帮助,但我不知道该如何描述它。我运行编译后的程序,其行为与输入echo ''相同。没有输出,没有任何提示。用什么最有效的方式表达这种行为?

如果我使用调试器,则会得到program exited with code 0xc0000139

谷歌快速搜索返回的结果表明它 是编译器的问题。与下面关于我的编译器版本的评论相同...

要编译程序,我运行g++ main.cpp -o b.exe 要执行它,我运行./b.exe

3 个答案:

答案 0 :(得分:0)

Mingw在某些控制台上存在长期的问题(请参见其faq)。可能值得检查它是否输出失败而不是通过例如重定向到文件abc=(thing1 thing2 thing3 thing4) for j in C I; do for i in 0 1 2 3; do echo "grep 'ITEM_${abc[i]}' /folder1/folder2/THING_$jS_$i.sorted/585_10$jS_$i.sorted.gtf" done done

答案 1 :(得分:0)

经过一些有用的评论和无奈之后,我决定尝试构建最新的编译器。我陷下并使用了Cygwin。 (我对Cygwin确实没有问题,我只是想让MinGW正常工作。)

我遵循了该网站的说明(从https://gcc.gnu.org下载当前源代码之后)。

http://preshing.com/20141108/how-to-install-the-latest-gcc-on-windows/

注释:

  • 这是针对gcc的较旧版本,但我将相应的版本号替换为8.2.0(目前为当前版本)。

  • 我缺少一些先决条件,不得不cd进入源目录并从Cygwin终端运行./contrib/download_prerequisites。它可以无缝处理所有内容,虽然花了一点时间,但我现在可以使用string数据类型并成功运行程序。

  • 不要忘记最后的make install命令。我做到了,这很头疼。

最后,感谢所有有用的评论以及要求澄清的评论。当我打电话给机械师并说“我的汽车无法行驶”时,他们会提出有益的问题,我们将共同努力,为他们提供所需的相关信息。上面就是这样,我学到了一些东西(并解决了我的问题)。

答案 2 :(得分:0)

我遇到了同样的问题。我从 sourceforge 下载了 mingw 几天,除了我声明一个字符串外,一切都很好。然后它不会显示任何输出。也许是旧版本(6.3.0)有问题。我删除了所有文件并使用给定的教程重新安装:https://code.visualstudio.com/docs/cpp/config-mingw。这是一个较新的版本 (8.1.0)。现在它工作得很好!