#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
для нулевого указателя. То, что вы считаете неразумным, вполне может оказаться разумным в будущем. Зачем обходить стандартный способ проверки успешного динамического выделения?