使用std :: string或char指针时,G ++编译的应用程序崩溃

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用std :: string或char指针时,G ++编译的应用程序崩溃相关的知识,希望对你有一定的参考价值。

我刚刚安装了MinGW,因为我想使用轻量级代码编辑器而不是Visual Studio或Codeblocks编写代码,这两者都是我从未遇到过的问题。所以代码编译和工作,但由于某种原因,每次我尝试使用字符串或字符指针时崩溃。例如这段代码:

#include <iostream>

int main()
{
    std::string a;
    a = "Hello";
    std::cout << a;
    std::cin.get();
}

执行时抛出此错误:

但是这段代码:

#include <iostream>

int main()
{
    std::cout << "hello";
    std::cin.get();
}

完美的工作:

(我用std :: string和const char *都尝试过没有区别)

我安装了Visual Studio 2017,我不知道是否可能是这个问题。 MinGW 6.0.3版。

PD:我只将C:/ MinGW / bin目录添加到Path环境,不知道是否应该添加任何其他目录

答案

固定它!出于某种原因,g ++默认情况下会动态链接std库。由于我的程序没有找到dll,因此无法链接std :: string和std :: cout。解决方案是将-static-libstdc ++参数传递给g ++。

TL; DR:而不是像这样直接编译:

g++ somesourcefile.cpp

试试这个论点:

g++ somesourcefile.cpp -static-libstdc++

以上是关于使用std :: string或char指针时,G ++编译的应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

为什么std :: string没有空指针?

如何在 C++ 中将 char 指针附加到 std::string

STL 容器中的 const 指针

需要使用 std::string 用 const char* 填充数组,但它不起作用(我认为它正在存储指针)?

为啥我仍然可以在字符串范围之外访问 std::string::c_str() 返回的 char 指针? [复制]

如何将 std::vector<std::string> 转换为 C api 的 char*[] [重复]