微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有谁知道为什么 GCC 错误地改变了我的 c_str 指针?

如何解决有谁知道为什么 GCC 错误地改变了我的 c_str 指针?

为了更容易查看,代码附为图片,但本质上是这样的:

#include <iostream>

using namespace std;

int main() {
    string manu = "Lamborghini";
    const char *const c_manu = manu.c_str();

    string new_manu(c_manu);
    manu[0] = 'P';

    cout << c_manu << endl;
    cout << new_manu << endl;

}

吐出来:

Pamborghini
Lamborghini

这正是我所期待的。

但是,如果您从 c_str 指向的字符串创建一个新字符串,如下所示:

#include <iostream>

using namespace std;

int main() {
    string manu = "Lamborghini";
    const char *const c_manu = manu.c_str();

    string new_manu(manu);
    manu[0] = 'P';

    cout << c_manu << endl;
    cout << new_manu << endl;

}

然后吐出来:

Lamborghini
Lamborghini

我在 CLion 中使用 GCC,有人在 VSCode 中运行了完全相同的代码,并在两种情况下都获得了预期的结果。

Windows 10 x64

CLion 2020.3.3

cygwin64 3.2.0

CMake 3.17.5

制作:make.exe

C 编译器:gcc.exe

C++ 编译器:c++.exe

(所有三个都与 cygwin 捆绑在一起)

Weird new string bug in clion

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。