以下程序尝试连接两个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)。
为什么将所有内容放在一行上时此操作会失败?