Как объединить 2 LPOLESTR - PullRequest
2 голосов
/ 26 мая 2010

Я хочу объединить 2 строки в C ++, я не могу использовать char *.

Я попробовал следующее, но не работает:

#define url L"http://domain.com"
wstring s1 = url;
wstring s2 = L"/page.html";
wstring s = s1 + s2;
LPOLESTR o = OLESTR(s);

Мне нужна строка с конкатенацией s1 и s2. Любая информация или веб-сайт, который объясняет больше об этом? Спасибо.

Ответы [ 2 ]

4 голосов
/ 26 мая 2010

OLESTR("s") - это то же самое, что и L"s"OLESTR(s) - Ls), что явно не то, что вам нужно.
Используйте это:

#define url L"http://domain.com"
wstring s1 = url;
wstring s2 = L"/page.html";
wstring s = s1 + s2;
LPCOLESTR o = s.c_str();

Это дает вам LPCOLESTR (т. Е. const LPOLESTR). Если вам действительно нужно, чтобы он был неконстантным, вы можете скопировать его в новую строку:

...
wstring s = s1 + s2;
LPOLESTR o = new wchar_t[s.length() + 1];
wcscpy(o, s.c_str()); //wide-string equivalent of strcpy is wcscpy
//Don't forget to delete o!

Или, чтобы вообще избежать wstring ( не рекомендуется; было бы лучше преобразовать ваше приложение для использования wstring везде , чем для использования LPOLESTR):

#define url L"http://domain.com"
LPCOLESTR s1 = url;
LPCOLESTR s2 = L"/page.html";
LPOLESTR s = new wchar_t[wcslen(s1) + wcslen(s2) + 1];
wcscpy(s, s1); //wide-string equivalent of strcpy is wcscpy
wcscat(s, s2); //wide-string equivalent of strcat is wcscat
//Don't forget to delete s!
2 голосов
/ 26 мая 2010

Вам не хватает буквы L, чтобы заставить назначение s2 работать.

wstring s2 = L"/page.html";
...