为什么这个字符串连接工作分布在两行但只在一行上失败?

时间:2014-10-27 16:01:13

标签: c++ string concatenation string-concatenation stdstring

以下程序尝试连接两个wstrings和一个文字,并将结果转换为c风格的字符串。当所有这些逻辑放在一行上时它会失败,但当c风格的转换在一个单独的行上时会成功。

#include "stdafx.h"
#include <iostream>

using namespace std;

int wmain()
{
    wstring str1 = wstring(L"Example");
    wstring str2 = wstring(L"TestPath");

    // Two step construction
    wstring fullPth = wstring(str2) + wstring(L"\\") + str1;
    const wchar_t * twoStepConstruction = fullPth.c_str();

    // One step construction
    const wchar_t * oneStepConstruction = (wstring(str2) + L"\\" + str1).c_str();

    wcout << L"Two step construction yields:" << endl << twoStepConstruction
          << endl << endl;
    wcout << L"One step construction yields:" << endl << oneStepConstruction
          << endl << endl;
}

该程序的输出是

  

两步施工产量:   TestPath \实施例

     

一步结构产生:

检查VS调试器中的内存,似乎一步构造使其指针指向充满EE FE重复的内存。

这在Visual Studio 2013和Cygwin GCC 4.8.3中发生(GCC需要将wmain更改为main)。

为什么将所有内容放在一行上时此操作会失败?

0 个答案:

没有答案