![]() |
|
Модераторы: bsa |
![]()
|
|
| Sawa920 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 16.8.2007 Репутация: нет Всего: нет |
Добрый день.
в представленном ниже коде функция передает в программу массив символов, но данные искожаются, буквально из "\x02\v" в "\х12\0". Подскажите, пожалуйста, что не правильно я делаю? Код из С++Builder.
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
Sawa920, как на счет того что бы использовать union?
Добавлено через 13 минут и 43 секунды
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Sawa920, твоя ошибка в том, что ты пытаешься возвратить указатель на массив, который уничтожается сразу после выхода из функции. Есть два варианта решения:
1. выделять память через new/malloc и возвращать указатель на нее 2. сделать массив статическим (только будут проблемы в многопоточных приложениях) |
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
1. Для двухсимвольной строки нужно 3 байта (+'\0' в конце)
2. Возвращаемое значение не должно быть на стеке
или
|
||||
|
|||||
| Sawa920 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 16.8.2007 Репутация: нет Всего: нет |
Спасибо, все сразу стало понятно))). Мне больше понравился первый вариант. Вот что я получил (надеюсь я правельно освобождаю память):
1. Необязательно, я использую массив для хранения байтов данных, а не для вывода 2. Этот вариант я попробывал, еще до публикации темы, просто хотелось разобраться. Но все равно спасибо)))) Почитаю, попробую...впринципе все, что хотел, прояснил...но обязательно разбирусь) |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
после return операции не выполняются. Поэтому память не освобождается.
Используй лучше AnsiString или std::string. |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Ты делаешь strcpy() в своём примере - поэтому '\0' в конце обязателен. Кроме того, если первый байт '\0', второй байт не скопируется.
В данном случае, IntToChar может быть макросом, в котором делается просто приведение типов:
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
Sawa920, bsa трижды прав - работать с массивом символов это уже не современно. Тем более в такой задаче |
|||
|
||||
![]()
|
| Правила форума "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. |