Добавьте символ в конец строки malloc’d

#c #malloc #buffer

Вопрос:

Я ищу символ». » в файле. Я использую функцию read, чтобы найти ее. Проблема в том, что у меня есть размер буфера, и мне нужно зацикливаться до тех пор, пока я не найду символ». » с read(fd, buffer, bufferSize) . Я использовал malloc для выделения памяти на 1 размер буфера ( char *buffer = malloc((bufferSize 1) * sizeof(char)) ), но я не знаю, сколько раз мне придется зацикливаться. Как я могу добавить память в буфер в зависимости от циклов размера буфера, которые я буду выполнять ?

Комментарии:

1. Не считывайте больше, чем размер буфера, а затем прочитайте еще раз?

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

3. Так перераспределить? @zelph14

4. Укажите максимальный размер, а затем выделите столько памяти, сколько для этого требуется. В большинстве случаев решение «Я не знаю, насколько большим может быть x» — это «выяснить». Или, в качестве альтернативы, просто анализируйте, пока не найдете точку, а затем используйте fseek, чтобы начать все сначала, теперь, когда вы знаете, сколько вам нужно памяти.

5. Хорошо, я вижу, я проверю это. Спасибо вам обоим.

Ответ №1:

Строка не нужна.

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

 #define BUFFER_SIZE 1000 char buffer[BUF_SIZE];  long long loop_count = 0; ssize_t size_read; while ((size_read = read(fd, buffer, sizeof buffer)) gt; 0) {  void *dot_address = memchr(buffer, '.', size_read);  if (dot_address) {  loop_count  = dot_address - buffer;  printf("Found '.' as offset %lldn", loop_count);  break;   }  loop_count  = size_read; }  

ОП позже добавляет в комментарии: «Я должен сохранить все символы до точки в буфере, поэтому мне приходится добавлять память каждый раз, когда я делаю цикл».

Не уверен, когда прекратятся постоянные дополнительные требования.

Потерял интерес.