| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Убрать обрезание по ноль символу |
| Автор: Xaotuk 8.4.2009, 12:21 | ||||
| Проблема: необходимо обрабатывать массив байт, но так как такого типа в С++ нет использую unsigned char. При записи в массив должны использоваться любые символы, в том числе может встречаться и ноль символ '\0'. При обработке полученного массива не могу корректно определить конец строки, при записи str[i]!=NULL все равно идет остановка на ноль символе. К примеру функция определения длины массива:
Вернет только до '\0' несмотря на то что проверяется на NULL. Вопрос: как сделать проверку на инициализацию ячеек памяти, а не на их содержимое в этом случае. Использую динамические массивы, на всякий случай полный код:
В функции Add при определении длины входного массива и начинаются косяки если в середине массива встречается '\0'. |
| Автор: GoldFinch 8.4.2009, 12:25 |
| Xaotuk, 0==NULL "инициализацию ячеек памяти" такого понятия не существует |
| Автор: Xaotuk 8.4.2009, 12:30 |
| Тогда как решить проблему? |
| Автор: zim22 8.4.2009, 12:40 | ||
|
| Автор: Xaotuk 8.4.2009, 13:03 |
| Не годится. Во-первых, vector не вернет мне указатель на массив, а он мне нужен чтобы вызывать функцию генерации хэш кода, во-вторых, если и сделать возврат указателя будет первая проблема... |
| Автор: cutwater 8.4.2009, 13:06 |
| Явно хранить и передавать размер массива (или размер хранящихся данных) |
| Автор: Xaotuk 8.4.2009, 13:15 |
| Поясню подробнее. 1. Есть массив типа unsigned char, служащий для накопления данных извне. 2. Есть поток байт приходящий извне, его я пихаю в массив накопитель. 3. Мне надо определять длину приходящего потока, причем определением конца потока не должен быть ноль-символ. И вот как сделать последнее не знаю. |
| Автор: zim22 8.4.2009, 13:31 | ||||
|
| Автор: Dem_max 8.4.2009, 13:39 | ||||||
сделай так
Выбери концом данных другой символ |
| Автор: X-3R1 8.4.2009, 13:43 |
Да ну , ты чего ? Это ж надо заботиться о выделенной памяти. Ладно бы ещё потом не забыть её через delete удалить. А если исключение ? |
| Автор: GoldFinch 8.4.2009, 14:42 |
| X-3R1, и что, что исключение? в исключении и освобождай, по finally |
| Автор: X-3R1 8.4.2009, 14:52 |
| GoldFinch, удачи |
| Автор: JackYF 8.4.2009, 14:53 |
Двойная работа, не комильфо. |
| Автор: Fazil6 8.4.2009, 15:03 | ||
красиво звучит.... Вопросительный знак долженбыть не конце. |
| Автор: zim22 8.4.2009, 15:36 | ||
auto_ptr позаботится, если не массивы конечно динамические. ну или методику RAII прменить |
| Автор: X-3R1 8.4.2009, 18:07 | ||
Ну в примере во-первых динамические массивы, а во-вторых, auto_ptr не может быть элементом контейнера |
| Автор: Dov 8.4.2009, 18:33 | ||
|