добавить два указателя void * - PullRequest
0 голосов
/ 07 ноября 2011

Есть ли способ добавить 2 void * ptr? Каждый из них представляет собой массив символов:

Например:

void * ptr;
ptr = malloc(3);
read(0, ptr, 3);

void * rtr;
rtr = malloc(3);
read (0, rtr, 3);

/*how to add ptr and rtr??*/

Спасибо!

* РЕДАКТИРОВАТЬ: ДА, я хотел бы добавить содержимое вместе. На самом деле это больше из того, как работает мой код:

void *ptr;
ptr = malloc(3);
read(0, ptr, 3);

void *rtr;
rtr = malloc(1);
int reader;
reader=read(0, rtr, 1);
int i=1;
while(reader!=0){
  /* append contents of rtr to ptr somehow?? */
  i++;
  rtr = realloc(rtr, i);
  reader=read(0, rtr, 1);
}

Я читаю из файла. И файл может измениться, я должен добавить побайтово, если файл меняется.

1 Ответ

2 голосов
/ 07 ноября 2011

На ваш вопрос действительно нет ответа, как вы его сформулировали, но я постараюсь ...

Сначала вы должны выделить блок памяти, используя malloc ().Тогда ваш пустой указатель будет указывать на это.Этот блок будет иметь определенный размер.Второй блок соответствует тем же понятиям и имеет определенный размер.

Чтобы добавить второй к первому, первому блоку должно быть выделено достаточно дополнительного пространства для добавления содержимого второго блока.Затем вы должны использовать memcpy () для копирования байтов из второго блока в первый блок.Вам потребуется использовать указатель приведения к байту, чтобы указать смещение в первом блоке.

((unsigned char *) (ptr) + ptr_alloced_bytes) будет смещением в первый блок до концапервые скопированные данные, где ptr_alloced_bytes - это количество байтов, прочитанных первой операцией.

В противном случае вам потребуется выделить новый блок, достаточно большой для хранения обоих блоков, а затем скопировать их оба с помощью memcpy ().

...