2013-05-15 3 views
2

Я пытаюсь написать функцию для преобразования строки в LPCWSTR. Вот что у меня есть:C++ - Преобразование между строкой и LPCWSTR

LPCWSTR stoLPCWSTR(string str) 
{ 
    wstring w(str.begin(), str.end()); 
    return w.c_str(); 
} 

Я запускаю этот код с помощью отладки, и на обратной линии, передаваемая строка сидит безопасно в ш. Однако, когда он возвращается, он выглядит примерно так:

«ووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو ꑯ 䎕 骙 ᰀ 䪀 ɽ 绐 ɽ ▼ ཛ Э.»

... поэтому в основном, мусор. Что я делаю не так?

ответ

2

Ваша широкая строка, w, выходит из сферы действия в конце функции и уничтожается.

Значение, возвращаемое c_str(), больше не указывает действительные данные.

Верните широкую строку вместо этого и используйте на нем c_str() только в том месте, где это необходимо.

wstring stows(string str) 
{ 
    return wstring(str.begin(), str.end()); 
} 

//... 

wstring ws = stows("hello"); 

api_call_needing_LPCWSTR(ws.c_str()); 
+0

Итак, как я могу вернуть действительный указатель? –

+2

Верните 'wstring'. –

2

Здесь вы перенастраиваете нераспределенную память; wstring вышел из сферы действия, и вы возвращаете указатель на него. Вот почему вы получаете мусор.

Смежные вопросы