![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
jurgal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
при выполнении функции система просит отправить рапорт об ошибке в майкрософт =) |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
ошибок в приведенном коде не нашел.
1. возможно, ты передаешь кривой указатель в качестве параметра 2. что за функцмя strcpy_s(), главное, зачем? 3. str указывает куда? память выделена? 4. если твоему методу передать "100.", то может вылететь с ошибкой. Догадайся почему (hint: обрати внимание на точку) Это сообщение отредактировал(а) bsa - 6.1.2008, 23:11 |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 7 Всего: 60 |
||||
|
||||
jurgal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
это безопасная функция копирования строк, средний аргумент - длина копируемой строки. С обычной strcpy() VC++ Express не работает, вернее работает, но нужно в начале указывать, чтобы компилятор не обращал внимание на эту опасную(с точки зрения компилятора) старую функцию. char *str - закрытая переменная класса money, правда я без конструктора класс написал, может быть в этом проблема, инициализировать нулем ('\0') ? Сейчас попробую.
спасибо) понял ошибку, если строка будет 100. , то выйду за границы массива при увеличении индекса после точки =) |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Твоя ошибка в этом месте. strcpy не выделяет память под переменную. Поэтому ты должен либо сделать str статическим массивом (char str[1000]) или перед выполнением strcpy выделять память. Кстати, если уж на то пошло, что надо писать не strcpy_s(str, strlen(s), s), а strcpy_s(str, str_size, s), где str_size - объем выделенной памяти под str |
|||
|
||||
jurgal |
|
|||
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
сейчас работает, но результат не правильный. strcpy_s() вообще убрал пока, чтобы не смущало =) . допустим если ввести 45, то результатом будет 573 , т.е. он переводит 4 по ASCII в 52, затем умножает на 10 и прибавляет к 5 переведенной через ASCII в 53 и в итоге получается 573. Что то я запутался, ведь isdigit() проверяет символ аргумент или число. Пытался функцией atoi() каждый символ который isdigit преобразовать в int, но компилятор ругается на невозможность такого преобразования. Хелп =) Это сообщение отредактировал(а) jurgal - 7.1.2008, 03:59 |
|||
|
||||
Kuvaldis |
|
||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: нет Всего: 61 |
Надо
Потому что код цифры и ЗНАЧЕНИЯ цифры - это разные вещи... и отличаются на 48 Для переносимости вычитаем из кода цифры код нуля (это как раз и есть 48 = 0x30 ) -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |