![]() |
Разбиение буфера на переменные ( строки )
У меня опять проблема с буферами.
у меня есть буфер такого вида string1 x00 string2 x00 string2 x00 и так далее тоесть буфер состоит из нескольких строк разделенных нулями я побывал создавать структуру и с помощью нее разделять строки, но проблема в том что длина отдельных строк в буфере мне не известна и длина строк может меняться тоесть если я подогнал структуры под определенное количество байт, то не факт что и в следующий раз строки совпадут |
да проблема с буфЕрами это пять ^______^
используй динамический двумерный массив + в конце исходного буфера ставь дополнительный символ '\0' для обозначения конца. Сначала определяешь количество строк в буфере и выделяешь место под указатели на строки. Потом проходишь и считывая строки во временный буфер, определяешь размеры строк - выделяешь место под строку в массиве двумерном и копируешь туда строку из временного буфера. Если хочешь, завтра наверно напишу пример на plain C , а то сейчас спааааать надо ^______^ впрочем держи ^____^ написано через задницу, но работает. Код:
|
если я все правильно понял то достаточно фунукции strtok(). Получаеш количество вхождений в строку разделителей и в цикле с помощью этой функции делиш.
|
Так вешь еще проще - динамический массив pchar'ов
затем циклом проходишь от начала строки до конца и при встрече нуля ставишь умеличиваешь позицию в массиве и ставишь номер следующего элемента+адрес начала строки. При этом \0 сам будет сведетельствовать о конце строки. Другими словами не выдирать сами строки из буфера, а лишь ставить указатели на них. |
2St0nX
а разве strtok() умеет работать с '\0' в качестве раздилителей корректно? |
izlesa, спасибо за код, так же спасибо всем остальным за советы
|
izlesa, с кодом что то не так
иногда ( видимо зависит от содержимого буфера ), программа крешится отладчик показал на строку PHP код:
значения были такие count 13 counter 12 i 52430 j 678 Поток 'Поток Win32' (0xb2c) завершился с кодом 0 (0x0). Необработанное исключение в "0x0040162a" в "server.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00137c6a". Первый этап обработки исключения в "0x0040162a" в "server.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00137c6a". Необработанное исключение в "0x0040162a" в "server.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00137c6a". |
Цитата:
__________________ http://forum.korol-i-shut.ru/info/ub/119.gif |
размер самого ClBuf 10024
хм увеличил temp до 1024, толку никакого если надо могу выложить весь код проги |
Цитата:
Вы допустили ошибку : Код:
buffer = (char **)malloc(counter * sizeof(char **));Код:
buffer = (char **)malloc(counter * sizeof(char *));Код:
buffer[counter] = (char *)malloc((strlen(temp)+1)*sizeof(char *));Код:
buffer[counter] = (char *)malloc((strlen(temp)+1)*sizeof(char));Надеюсь,что разницу видите. |
| Время: 01:09 |