Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт сен 21, 2017 10:03 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 203 сообщения ]  На страницу Пред. 19 10 11 12 13 14 След.
Автор Сообщение
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн мар 24, 2014 12:46 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
Leency писал(а):
Что ты конкретно хочешь сделать?

> Каким образом в С-- можно получить данные определенного размера с определенной позиции?
strncpy(in_buf, from_buf + смещение_на_определённую позицию, размер_копируемых_данных);

оно?


Теоретически оно. В общем то, мне нужен скорее всего двумерный массив, где длина всех строк одинакова.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн мар 24, 2014 1:19 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4174
> массив, где длина всех строк одинакова.
Их есть у нас. http://websvn.kolibrios.org/filedetails ... Fhistory.h

Код:
struct path_string {
char Item[4096];
};
 
#define MAX_HISTORY_NUM 40
path_string history_list[MAX_HISTORY_NUM];

Код:
strlcpy(#history_list[current].Item, #URL, sizeof(history_list[0].Item));

А вот для чего-то покруче (например, массив переменного размера) придётся писать свои функции. Пингуй мя в скайпе jewont, вконтактах, тут, если будут вопросы.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн мар 24, 2014 2:19 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
А как очищать подобную структуру ты случаем не продумывал? А то как-то не хочется в тупую циклом обходить.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн мар 24, 2014 2:36 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4174
> А как очищать подобную структуру ты случаем не продумывал?
for (i=0; i<count; i++) strcpy(#history_list[i].Item, 0);

или как-то так, если ты об этом
поидее это быстро

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Ср мар 26, 2014 12:28 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
В общем появилась необходимость динамически расширять массив, т.е. выделять доп. память под массив при его увеличении. Насколько я понял это можно сделать при помощи функции dword realloc(dword mptr, size)
где dword mptr - указатель на текущий массив, size - соответственно новый размер массива, а на выходе указатель на наш массив с дополнительной выделенной памятью, правильно?

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Ср мар 26, 2014 12:29 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
Код:
struct Copy_Path {
   dword   size;
   dword   type;
   path_str copy_list[1];
};   


path_str copy_list[1] - мне и надо увеличивать при необходимости

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Ср мар 26, 2014 11:15 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4174
Нужно смотреть код.
Вообще да, нужно хранить размер массива и если его не хватает - realloc.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пт апр 25, 2014 6:42 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
struct path_str {
char Item[4096];
};

#define MAX_HISTORY_NUM 10

Clipboard clipboard;

struct Copy_Path {
dword size;
dword type;
int count;
path_str copy_list[MAX_HISTORY_NUM];
};

Как массив copy_list заменить на динамически изменяющийся?

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пт апр 25, 2014 6:56 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
punk_joker
Какой размер планируется в килобайтах - от и до ?


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пт апр 25, 2014 7:04 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
Serge писал(а):
punk_joker
Какой размер планируется в килобайтах - от и до ?

Если о размере окончательного массива, то неизвестно заранее. Мне необходимо будет его увеличивать при необходимости на один элемент.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пт апр 25, 2014 8:05 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Сб окт 05, 2013 9:32 pm
Сообщения: 385
punk_joker писал(а):
Serge писал(а):
punk_joker
Какой размер планируется в килобайтах - от и до ?

Если о размере окончательного массива, то неизвестно заранее. Мне необходимо будет его увеличивать при необходимости на один элемент.

Как вариант, можешь написать такой класс, который имеет значение, id, ссылку на следующий элемент (если == 0, то это конечный элемент вектора), сслыку на предыдущий элемент (если == 0, то это первый элемент). Можно просто портировать заголовок vector с C.
Метод push создаёт новый объект класса vector (нашего класса), устанавливает newvc.id = this.id + 1; newvc.prev = this; this.next = newvc;
Метод get_el или [] просто сравнивает id, если меньше, то сравнить с id+1, если больше, то id-1, иначе вернуть value. Всё это в цикле.


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пт апр 25, 2014 8:30 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
punk_joker
То есть нижняя границ 4Кб и верхняя несколько десятков Мб или полтора Гб ?


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пт апр 25, 2014 10:40 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
Serge писал(а):
punk_joker
То есть нижняя границ 4Кб и верхняя несколько десятков Мб или полтора Гб ?

Врятли таких объемов достигнет, но да.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Сб апр 26, 2014 1:15 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
punk_joker
Если массив непрерывный особых проблем нет. Резервируешь большой диапазон адресов ф68.12. Пока массив растёт, считаешь кол-во страниц которое он занимает, физ память автоматически предоставит ядро. Когда массив начнёт уменьшаться возвращаешь ядру ненужные страницы ф68.26. Например у тебя был массив 719Кб это 180стр, стало 113 Кб это 29 стр. Значит edx = 29 * 4096 esi = (180-29)*4096. Когда массив начнёт расти, ядро снова выделит память в пределах первоначально зарезервированных ф.68.12. При желании ты можешь освободить страницы в любом месте в пределах диапазона. Используя этот механизм можно зарезервировать все доступное пространство адресов и дальше использовать свой аллокатор.
P.S. ядро обнуляет выделяемую память.


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Сб апр 26, 2014 1:06 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4174
Считаешь кол-во выделенных файлов Insert'ом. Узнаёшь их кол-во.
Допустим их 34. Тогда делаешь copy_files_mas=malloc(34*4096).
Потом сохраняешь пути для каждого strcpy(i*nomer_faila+copy_files_mas, file_path_to_copy);
где i - это список файлов от 0 до 33.

_________________
Через тернии к звездам


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 203 сообщения ]  На страницу Пред. 19 10 11 12 13 14 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB