![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Помогите разобраться в чем причина того что strlen(chBuff) определяет неверно количество символов в строке?Пробовал делать chBuff static но тогда размер совсем нулевой, если просто char без static размер 22(если вводить 3 символа в строку ввода).
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Ты предлагаешь перерыть весь твой код, чтобы найти, где там у тебя chBuff ? Или полагаешь, что оконная функция имеет к проблеме какое-то отношение? Первое, чему должен начуиться программист (и вообще любой инженер) - это правильно задавать вопросы, в том числе себе. Т.е. выделить проблему без лишних деталей.
-------------------- ... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Типичные проблемы.
а) Не инициализированные переменные. б) Возврат стекового значение по ссылке. в) Переполнение буфера (затер конечный 0, а может вылез за границы памяти). г) Использование указателя на буфер после его уничтожения. На первый взгляд видна только проблема "а". char chBuff[10]; => char chBuff[10] = {0}; -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
|
|||
|
||||
| toxx |
|
||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Ну вопрос я изложил правильно и проблему думаю тоже, а вот указать место где неисправность забыл(простите что конкретно не указал). chBuff объявлен так
Место проблемы
Я так уже пробовал инициализировать, но тогда длинна строки в этом месте равна 0 EM_GETLINE ничего не возвращает.
Также я пробовал делать результат такойже как и если инициализировать char chBuff[10]; => char chBuff[10] = {0};
Код для программы исходный брал из Р. М. Ганеев Проектирование интерфейса в Win32 API Проблемы мб кроется в какихто новшествах win7 ? Я делал калькулятор на ХР и при переносе на win7 возникли тоже трудности(Я их исправил). В прогрмме моего калькулятора всё объявленно точно также и работает стабильно.Вот пример определения стабильного
Алгоритм не мой, я лишь создаю графическую оболочку. Это сообщение отредактировал(а) toxx - 10.12.2009, 14:32 |
||||||||||||||||
|
|||||||||||||||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Остановись отладчиком на strlen и посмотри, что у тебя в chBuff и что возвращает strlen. Она скорее всего не виновата
Добавлено через 3 минуты и 31 секунду Еще вопрос - зачем тут
Добавлено через 6 минут и 13 секунд И еще, вот это
|
||||
|
|||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Вот что в них если инициализировать как char chBuff[10];
там g++ стоит в конце flag=0 не знаю о чем думал тот кто делал алгоритм) Он потомучто не мой, я тока графику делаю. |
||||
|
|||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Ну и что ты хочешь получить от strlen - у тебя в буфере лежит не терминированная 0 строка (с мусором).
|
||||||
|
|||||||
| toxx |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
Если эту строку обнулить(Как предлагает Alexis char chBuff[10] = {0}; ) Строка становится пустой(ктобы мог подумать=) ) И если вызвать
то будет в дебаггере вот это то он вообще ничего не сохраняет в chBuff, в нём почемуто тупо нет ничего и вот этого я никак не пойму((( |
||||
|
|||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Это правильно - читаем MSDN:
|
||||||
|
|||||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: нет Всего: 13 |
xvr
Спасибо за ответ) А можно еще вопрос. Не могутли эти странности зависеть от ОС? У меня когда я читал книгу стоял ХР(и всё работало четко), щас поставил win7 и появились вот такие вот сложности. В предыдущей своей программе когда перешел на win7 цвета отображались некорректно, вылезли левые символы(но всё благополучно исправил), здесь же не вышло) Кст проверил код что мне дали, чтобы туда засунуть оказалось что он кривой=( Так что теперь ждать буду пока переделают. |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Могут. MS не гарантирует, что OS'ы будут bug в bug compatible В принципе и в правильных конструкциях могут проявляться различия, но они все связаны с OS API и проявляются только если делается что то совсем не тривиальное
|
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
скорее даже багам в win7 стали ужелять большее внимание, чем в XP, т.е. там, где на ошибку раньше закрывали глаза, теперь глаза открывают, причем глаза самих же программистов, которые эти ошибки делали во времена XP, а сама ось кривее не стала ) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |