Показать сообщение отдельно

  #5420  
Старый 17.06.2010, 13:33
herfleisch
Участник форума
Регистрация: 07.01.2009
Сообщений: 237
С нами: 9126697

Репутация: 97
По умолчанию

Цитата:
Сообщение от mailbrush  
Код:
recv(s, response, 1024, 0);
Этим кодом я получаю 1024 байта и записываю их в response.
Как получить абсолютно всю информацию, предварительно не зная сколько байтов, и записать все это в один массив символов?

Код:
do
{
 iResult = recv(s, response, 1024, 0);
}
while(iResult > 0);
Этим кодом получается вся информация, но проблема в том, что в response оказываются последние 1024 байта, что очевидно. Необходимо как-то создать буфер неизвестной длины, и в цикле делать конкатенацию буфера вместе с полученной инфой, но как?

Еще как вариант - создать динамический массив, и в цикле расширять его размер, опять вопрос - как?

Спасибо заранее.
Храни строки в списке, а не в массиве. Например, принимаешь по 1024 символа.

Собственно список - это и есть какое-то подобие динамического массива.

Тогда кодишь так:
Код:
struct info
{
  info * next; // Указатель на след. элемент
  info * prev; // и на предыдущий
  char data[1024];
} node;

...

recv(s, node.data, 1024, 0);

/*
 В классе хранишь указатели на первую принятую строку. Далее раотаешь с объектом.
*/

...
Далее можно написать класс, реализующий линейный двусвязный список, нафигачить ему конструкторы копирования всякие, перегрузку выражений и т.д.
 
Ответить с цитированием