QString 的奇怪行为

Strange behavior with QString

这是我的代码:

#include <QCoreApplication>
#include <QTextStream>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream out(stdout);

    QString filename = "F:/temp/йцук.tx";

    out << filename << endl;

    const wchar_t* fn_wch = filename.toStdWString().c_str();

    std::wcout << filename.toStdWString().c_str() << std::endl;   //1
    std::wcout << fn_wch << std::endl;                            //2

    return a.exec();
}

问题是行“1”和“2”输出不同的字符串。但他们不应该是一样的吗?因为我之前把fn_wch赋给了filename.toStdWString().c_str()。

UPD0:

我更改了代码以防止访问被破坏的 wstring 的数据:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream out(stdout);

    QString filename = "F:/temp/йцук.tx";

    out << filename << endl;

    auto wstr = filename.toStdWString();

    auto wchar = wstr.c_str();

    std::wcout << wchar << std::endl; //1

    std::wcout << wchar << std::endl; //2

    std::wcout << wstr; //3

    return a.exec();
}

但问题依旧:第1行输出数据,但第2行和第3行没有。

int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "russian");
    QCoreApplication a(argc, argv);
    QTextStream out(stdout);

    QString filename = "F:/temp/йцук.tx";

    out << filename << endl;

    auto wstr = filename.toStdWString();

    //auto wchar = wstr.c_str();
    wchar_t wchar[wstr.size()];
    wcscpy(wchar, wstr.c_str());

    std::wcout << wchar << std::endl; //1

    std::wcout << wchar << std::endl; //2

    std::wcout << wstr; //3

    return a.exec();
}

有效。 c_str()中的指针被破坏,是否需要复制数据。