2014-01-06 2 views
0

У меня есть функция, которая принимает только один аргумент LPWSTR. Однако мне нужно добавить целое число до конца.Как добавить целое число в LPWSTR

Вот пример псевдокода:

int theNumber = 5; 
LPWSTR myLPWSTR = L"Number is: "; 
/* Add theNumber to myLPWSTR */ 
myFunction(myLPWSTR); 

Как это сделать?

Я уже пробовал конвертировать int в LPWSTR, а затем объединить их, но мне это не удалось. Я пробовал это на все утро, но просто не могу понять, как это сделать.

Я пробовал например. wsprintf, _itow_s, c_str и почти все, что я знаю, но просто не могу этого сделать, и это действительно расстраивает.

Кто-то, пожалуйста, помогите.

+1

Можете ли вы опубликовать (некоторый) код, который вы пробовали? – Angew

+0

Помните, что вы не можете изменить 'myLPWSTR', потому что он указывает на постоянные данные. – chris

ответ

1

Предполагая, что функция действительно принимает LPWSTR и не LPCWSTR (т.е. он может изменить строку, переданную в), вы должны сделать что-то вроде этого:

int theNumber = 5; 
std::wostringstream s; 
s << L"Number is: " << theNumber; 
std::wstring str = s.str(); 
std::vector<wchar_t> buf(str.begin(), str.end()); 
buf.push_back(0); 
myFunctions(&buf[0]); 

Это необходимо потому, что вам нужно снабжают надлежащим образом нулевым и модифицируемым буфером wchar_t с. str.c_str() nul-terminated, но не поддается изменению. &str[0] может быть изменен, но не (гарантировано) nul-terminated.

+0

@chris Конечно, спасибо; изм. У меня изначально был '+ 1', затем решил пойти с' push_back() 'и не обновил его. Очевидно, вы можете получить запах кода даже в 8-строчном примере. – Angew

+0

Хехе :) И небольшое примечание к последнему предложению, применимое только к pre-C++ 11. Начиная с C++ 11, это действительная строка C и модифицируется вплоть до неявного значения null. Pre-C++ 11 также имеет возможную неудовлетворенность. – chris

+0

@chris У вас есть цитата для C++ 11? Все, что я мог найти, это 's [s.size()]' ссылается на 'NUL', а' & * (s.begin() + n) == & * s.begin() + n' выполняется для '0 <= n Angew

0

Если вы можете использовать C++ 11:

std::wstring str = L"Number is: "; 
str += std::to_wstring(42); 
myFunction(str.data()); 

если нет:

std::wstringstream ss; 
ss << L"Number is: " << 42; 
myFunction(ss.str().c_str()); 

Не забудьте включить строку и sstream.

+0

Не, если функция принимает 'LPWSTR'. Вы должны использовать '& str [0]' и не позволять ему изменять неявный нуль. Обратите внимание, что этот метод работает только для C++ 11 и выше. Также обратите внимание, что 'data()' эквивалентно 'c_str()' в C++ 11. – chris

+0

Это будет коротко и хорошо, но у меня есть ошибка: ошибка C2664: 'myFunction': невозможно преобразовать параметр 1 из 'const wchar_t *' в 'LPWSTR'. Я проверю теперь другие предложения, спасибо :) – user2404495

+1

Вам нужна ваша функция LPWSTR? не можете ли вы изменить его на LPCWSTR? Если нет, используйте версию Angews, чтобы скопировать новую строку в вектор и использовать ее. – user1233963

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