#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; }
ОП позже добавляет в комментарии: «Я должен сохранить все символы до точки в буфере, поэтому мне приходится добавлять память каждый раз, когда я делаю цикл».
Не уверен, когда прекратятся постоянные дополнительные требования.
Потерял интерес.