Форум программистов, компьютерный форум CyberForum.ru

Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); - C++

Восстановить пароль Регистрация
 
Ghost
Сообщений: n/a
12.10.2009, 17:33     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #1
Выполняю такой код - и прога вылетает. Где ошибка - в генах или у MS?
Студия 2003

{
CString st;
UINT m_hReplicatorApplicationID (0xFFFFFFFF);
long m_lTryCount(0);
DWORD m_dwChannelID(0);

st = _T('> IP = ');
st += _T(', OP = ');
st += _T(', AI = %x');
st += _T(', TC = %x');
st += _T(', Ch = %x <');
st.Format(st, m_hReplicatorApplicationID, m_lTryCount, m_dwChannelID);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2009, 17:33     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF);
Посмотрите здесь:

C++ Преобразование int в CString ?
C++ Отличие CString от std::string
Преобразование CString в CEdit C++
fgets и CString C++
класс CString C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ghost
Сообщений: n/a
13.10.2009, 01:15     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #2
Гммм....

Вот эта конструкция вылетает:
CString st;
st = _T('%x');
st.Format(st, 0xFFFFFFFF);

А вот эта - работает:
CString st;
st.Format(_T('%x'), 0xFFFFFFFF);

и беды с CString.Format у MS идут аж с MSVC++ 2.0 (((
Фигово... ну и хрен с ним - главное - нашел, как обойти.
John Paramol
Сообщений: n/a
23.01.2011, 22:22     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #3
'ghost', я тебя знаю?
Ghost
Сообщений: n/a
24.01.2011, 15:35     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #4
Сомневаюсь
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
24.01.2011, 18:29     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #5
Я бы тоже на месте MS выбросил Exception, ты же пытаешься менять строку которую используешь в качестве шаблона для ф-ции формат. Можешь объяснить, зачем тебе такое поведение программы?
Ghost
Сообщений: n/a
25.01.2011, 14:32     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #6
гммммм.... бум - спасибо ))) я не тормоз )
в общем - не люблю плодить лишние переменные.
заработало в виде:

{
CString st;
UINT m_hReplicatorApplicationID (0xFFFFFFFF);
long m_lTryCount(0);
DWORD m_dwChannelID(0);

st = _T('> IP = ');
st += _T(', OP = ');
st += _T(', AI = %x');
st += _T(', TC = %x');
st += _T(', Ch = %x <');
st2.Format(st, m_hReplicatorApplicationID, m_lTryCount, m_dwChannelID);
}
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
26.01.2011, 00:03     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #7
Ghost в отличие от John Paramol я-то тебя давно знаю, по крайней мере по постам на релибе, и я знаю, что ты не тормоз

Функция Format берет в качестве первого параметра LPCTSTR - длинный указатель на неизменяемую строку и подразумевает что та не изменяется. Ты ей даешь переменную типа CString происходит неявное преобразование строки в этот указатель, по сути просто ссылка на внутренний буфер класса CString приводится к LPCTSTR. Начинается работа функции форматирования и внутренний соответственно внутренний буфер объекта CString начинает менятся. 'Как же это так?' - возмущается ф-ция формата и выбрасывает ошибку. Короче конфликтик получается.

Вообще для неизменямых шаблонов для функции Format лучше всего подойдут строковые константы. Ну а для изменямых придется завести новую переменну. Кстати вовсе не обязательно тяжелую CString, подойдет и char[200] или char* (в Unicode версии _TCHAR или как то так).

С уважением, Владимир
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2011, 14:19     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF);
Еще ссылки по теме:

Приведение типов. CString. C++
Конвертация Cstring в wchar_t* C++
C++ <cstring> strlen() C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ghost
Сообщений: n/a
26.01.2011, 14:19     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); #8
>> Функция Format берет в качестве первого параметра LPCTSTR - длинный указатель на
неизменяемую строку и подразумевает что та не изменяется

Да допер сразу после вопроса, спасибо ) как-то не задумывался на эту тему
Yandex
Объявления
26.01.2011, 14:19     Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF);
Ответ Создать тему
Опции темы

Текущее время: 11:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru