функция чтения: копирование буфера, перераспределение памяти

#c #char #malloc #buffer

#c #символ #malloc #буфер

Вопрос:

Я пытаюсь прочитать текстовый файл с помощью функции чтения и сохранить в буфер. Затем я должен снова проверить файл, чтобы увидеть, были ли внесены какие-либо изменения, и, если есть, перераспределить память и сохранить содержимое в том же буфере (добавление), символ за символом, пока не будет достигнут EOF. Мой код пока выглядит так:

 int fileSize=0;
fileSize=fileStat.st_size; /*fileSize is how many bytes the file is, when read initially*/

char buf[fileSize];
read(0, buf, fileSize);

/*now, I have to check if the file changed*/
int reader;
void *tempChar;
int reader=read(0, tempChar, 1);
while(reader!=0){
   /*this means the file grew...I'm having trouble from here*/
  

Я много чего перепробовал, но всегда возникают проблемы, когда я пытаюсь добавить содержимое из «tempChar» в «buf». Я знаю, как использовать функцию перераспределения .. но у меня все еще возникают проблемы. Любая помощь будет оценена.

Спасибо!

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

1. Можете ли вы вставить код, с которым у вас возникли проблемы, и описать проблемы, с которыми вы сталкиваетесь. Кроме того, было бы полезно посмотреть, как вы инициализируете tempChar в первую очередь. (Вставленный вами код использует ее при вызове read , вообще не инициализируя ее.)

Ответ №1:

Вы не можете использовать realloc() для статически выделенной памяти.

Если вы хотите это сделать, вам придется использовать указатели и распределять память динамически.

Пример:

 char *buf;
buf = malloc(fileSize);
  

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

1. @sarnold: Вы не «проверяете размер выделений на разумность», вы проверяете возвращаемое значение malloc для нулевого указателя. То, что вы считаете неразумным, вполне может оказаться разумным в будущем. Зачем обходить стандартный способ проверки успешного динамического выделения?