Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Странное поведение программы (не знаю как описать)

18K
25 сентября 2011 года
logree
102 / / 27.09.2008
возникла проблема, есть такой код:
 
Код:
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 var;
var = static_cast<LPTSTR>(...);
wcout << var; //ни чего не выводит
wcout << static_cast<LPTSTR>(...); выводит все как нужно.


в чем дело? почему так? ps MSVC++ 2010 Express
14
26 сентября 2011 года
Phodopus
3.3K / / 19.06.2008
Во-первых странная программа.
Почему компилятор не ругается например на это:
 
Код:
wstring tmpStr = "lalala";

Во-вторых нарушение стандарта при использовании c_str()
240
26 сентября 2011 года
aks
2.5K / / 14.07.2006
А еще не понятно зачем в первых двух случаях выделяется память, а затем указатель затирается новым, а выделенная память теряется. Неаккуратно с памятью работаете - вполне возможно не только в этом месте. Возможно в этом и причины.
18K
27 сентября 2011 года
logree
102 / / 27.09.2008
Короче вся эта неразбериха была заменена на
 
Код:
tmpStr = tmpStr.substr(eqPos+1);
    name = const_cast<WCHAR *>(tmpStr.c_str());

и вуаля.

Цитата:

Почему компилятор не ругается например на это:
wstring tmpStr = "lalala";


писал ТУТ из-за этого и L потерялась.

Цитата:
Во-вторых нарушение стандарта при использовании c_str()


а можно пояснить? если речь о wchar_t то вроде все верно.

Цитата:
А еще не понятно зачем в первых двух случаях выделяется память, а затем указатель затирается новым, а выделенная память теряется. Неаккуратно с памятью работаете - вполне возможно не только в этом месте. Возможно в этом и причины.


за это спасибо, просто приведение типов через _cast для меня нечто не привычное :)

14
27 сентября 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: logree

а можно пояснить? если речь о wchar_t то вроде все верно.


По умному почитайте стандарт. Вкратце по тупому - возвращаемой значение валидно только чтобы сразу скопировать.

18K
30 сентября 2011 года
logree
102 / / 27.09.2008
Почитал, понял, спасибо :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог