wstring tmpStr = "lalala";
LPTSTR name;
name = new WCHAR[(tmpStr.substr(eqPos+1)).length()+1];
name = static_cast<LPTSTR>(const_cast<wchar_t *>((tmpStr.substr(eqPos+1)).c_str()));
wcout << name; // <- ничего не выводит!
Странное поведение программы (не знаю как описать)
Код:
Код:
wstring tmpStr = "lalala";
LPTSTR name;
name = new WCHAR[(tmpStr.substr(eqPos+1)).length()+1];
name = static_cast<LPTSTR>(const_cast<wchar_t *>((tmpStr.substr(eqPos+1)).c_str()));
wcout << wcout << static_cast<LPTSTR>(const_cast<wchar_t *>((tmpStr.substr(eqPos+1)).c_str())); // <- выводит все как и должно быть!?
LPTSTR name;
name = new WCHAR[(tmpStr.substr(eqPos+1)).length()+1];
name = static_cast<LPTSTR>(const_cast<wchar_t *>((tmpStr.substr(eqPos+1)).c_str()));
wcout << wcout << static_cast<LPTSTR>(const_cast<wchar_t *>((tmpStr.substr(eqPos+1)).c_str())); // <- выводит все как и должно быть!?
т.е
Код:
LPTSTR var;
var = static_cast<LPTSTR>(...);
wcout << var; //ни чего не выводит
wcout << static_cast<LPTSTR>(...); выводит все как нужно.
var = static_cast<LPTSTR>(...);
wcout << var; //ни чего не выводит
wcout << static_cast<LPTSTR>(...); выводит все как нужно.
в чем дело? почему так? ps MSVC++ 2010 Express
Почему компилятор не ругается например на это:
Код:
wstring tmpStr = "lalala";
Во-вторых нарушение стандарта при использовании c_str()
А еще не понятно зачем в первых двух случаях выделяется память, а затем указатель затирается новым, а выделенная память теряется. Неаккуратно с памятью работаете - вполне возможно не только в этом месте. Возможно в этом и причины.
Код:
tmpStr = tmpStr.substr(eqPos+1);
name = const_cast<WCHAR *>(tmpStr.c_str());
name = const_cast<WCHAR *>(tmpStr.c_str());
и вуаля.
Цитата:
Почему компилятор не ругается например на это:
wstring tmpStr = "lalala";
писал ТУТ из-за этого и L потерялась.
Цитата:
Во-вторых нарушение стандарта при использовании c_str()
а можно пояснить? если речь о wchar_t то вроде все верно.
Цитата:
А еще не понятно зачем в первых двух случаях выделяется память, а затем указатель затирается новым, а выделенная память теряется. Неаккуратно с памятью работаете - вполне возможно не только в этом месте. Возможно в этом и причины.
за это спасибо, просто приведение типов через _cast для меня нечто не привычное :)
Цитата: logree
а можно пояснить? если речь о wchar_t то вроде все верно.
По умному почитайте стандарт. Вкратце по тупому - возвращаемой значение валидно только чтобы сразу скопировать.
Почитал, понял, спасибо :)