2010-12-20 42 views
7

Mam dwie zmienne, które są LPCWSTR s. Chcę utworzyć nową zmienną, która będzie miała wartości pierwszej i drugiej zmiennej.
Próbowałem, ale to nie zadziałało.jak połączyć dwa LPCWSTRy?

LPCWSTR d = L"sd"; 
LPCWSTR f = L"f"; 
LPCWSTR df = d + f; 

Otrzymuję ten błąd, gdy próbuję tego.

1 IntelliSense: expression must have integral or enum type 

Czy istnieje funkcja, która może łączyć dwa LPCWSTR s?

+0

Mówi się, że oczekujesz, że wynikowy ciąg będzie "L" sdf "", podobnie jak "strcat" dałby ci łańcuchy 'char'? – cHao

Odpowiedz

12

W C++ dobrze jest użyć std::string do manipulacji z ciągami. W twoim przypadku może to wyglądać następująco:

LPCWSTR d = L"sd"; 
LPCWSTR f = L"f"; 
std::wstring df = std::wstring(d) + f; 
LPCWSTR dfc = df.c_str(); // if you are really need this 
1

Nie działa, ponieważ kompilator C++ nie może wygenerować kodu łączącego tablice. Dwa łańcuchy w tym przykładzie to tablice typu wchar_t. Aby dołączyć tablice, musisz użyć funkcji wyższego poziomu. Istnieje kilka sposobów na zrealizowanie go:

LPWSTR df[20]; // cannot be LPCWSTR, because the C is for const. 
wcsprintf(df, L"%s%s", d, f); 

lub

LPWSTR df[20]; 
wcscpy(df, d); 
wcscat(df, f); 

lub wykorzystanie STL jak wcześniej odpowiedzi.

+1

Ack! 'wcscpy' i' wcscat' to czyste zło! Użyj wariantów sprawdzonych przez granice! –

+0

Ummm ... zadeklarowałeś df jako tablicę 20 wskaźników do szerokich znaków. Myślę, że naprawdę chcesz wchar_t df [20]; Komentarz Jonathana Grynspana jest w 100% poprawny - trzymaj się z dala od wcscpy i wcscat, zamiast tego użyj wcscpy_s i wcscat_s. –