Строковый буфер неограниченного размера в c - PullRequest
1 голос
/ 26 февраля 2012

Я создаю 'строку'

char buffer[BUFFER_SIZE]

, но когда она заполнится, я хочу объединить ее с уже существующей строкой, но она должна иметь неограниченную длину и повторять этот процесс доЯ прочитал все данные.

Есть идеи, как мне это сделать?

Ответы [ 4 ]

4 голосов
/ 26 февраля 2012

То, что вы описали, является альтернативным определением для realloc.

3 голосов
/ 26 февраля 2012

Вам необходимо динамически распределять память, используя malloc и realloc.

2 голосов
/ 11 апреля 2017

Я использовал open_memstream для достижения этой цели в прошлом.

Эта функция открывает поток для записи в буфер. Буфер распределяется динамически и при необходимости увеличивается с помощью malloc. После того, как вы закрыли поток, вы должны очистить этот буфер, используя free или realloc.

https://www.gnu.org/software/libc/manual/html_node/String-Streams.html

#include <stdio.h>

int
main (void)
{
  char *bp;
  size_t size;
  FILE *stream;

  stream = open_memstream (&bp, &size);
  fprintf (stream, "hello");
  fflush (stream);
  printf ("buf = `%s', size = %zu\n", bp, size);
  fprintf (stream, ", world");
  fclose (stream);
  printf ("buf = `%s', size = %zu\n", bp, size);

  return 0;
}
2 голосов
/ 26 февраля 2012

вы можете попробовать использовать realloc

char *temp = NULL;
char *buffer = (char*) realloc (temp, BUFFER_SIZE*sizeof(char));

вы получите динамический объем памяти на основе BUFFER_SIZE

...