Ghost
|
|
#1 | |
Вылетает конструкция: CString st; st = _T('%x'); st.Format(st, 0xFFFFFFFF); - C++12.10.2009, 17:33. Просмотров 967. Ответов 7
Метки нет Все метки)
(
Выполняю такой код - и прога вылетает. Где ошибка - в генах или у 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++):
7
CString::Format() и преобразование double в CString - Visual C++ Конструкция с IIf вылетает. Не могу понять в чем причина. - Visual Basic .NET Значение 0xFFFFFFFF заменить на 0х00000000 - C#
STOP: 0x000000A5 0X00001000 0X00000000 0XFFFFFFFF 0X00002040 - BSOD #define PRINT(format,x) printf("x = %format\n",x) - C (СИ) |
Ghost
|
|
13.10.2009, 01:15 | #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
|
|
23.01.2011, 22:22 | #3 |
'ghost', я тебя знаю?
|
Ghost
|
|
24.01.2011, 15:35 | #4 |
Сомневаюсь
|
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
|
|
24.01.2011, 18:29 | #5 |
Я бы тоже на месте MS выбросил Exception, ты же пытаешься менять строку которую используешь в качестве шаблона для ф-ции формат. Можешь объяснить, зачем тебе такое поведение программы?
0
|
Ghost
|
|
25.01.2011, 14:32 | #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 | #7 |
Ghost в отличие от John Paramol я-то тебя давно знаю, по крайней мере по постам на релибе, и я знаю, что ты не тормоз
![]() Функция Format берет в качестве первого параметра LPCTSTR - длинный указатель на неизменяемую строку и подразумевает что та не изменяется. Ты ей даешь переменную типа CString происходит неявное преобразование строки в этот указатель, по сути просто ссылка на внутренний буфер класса CString приводится к LPCTSTR. Начинается работа функции форматирования и внутренний соответственно внутренний буфер объекта CString начинает менятся. 'Как же это так?' - возмущается ф-ция формата и выбрасывает ошибку. Короче конфликтик получается. Вообще для неизменямых шаблонов для функции Format лучше всего подойдут строковые константы. Ну а для изменямых придется завести новую переменну. Кстати вовсе не обязательно тяжелую CString, подойдет и char[200] или char* (в Unicode версии _TCHAR или как то так). С уважением, Владимир
0
|
Ghost
|
|
26.01.2011, 14:19 | #8 |
>> Функция Format берет в качестве первого параметра LPCTSTR - длинный указатель на
неизменяемую строку и подразумевает что та не изменяется Да допер сразу после вопроса, спасибо ) как-то не задумывался на эту тему |
26.01.2011, 14:19 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
26.01.2011, 14:19 |
Привет! Вот еще темы с ответами:
8
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |