>Задача, прочитать текстовые данные из файла и записать их в другой, вроди >все ок, но в конце дописывает какие-то крякозябли. ( подозреваю что >это из-за размера буфера buf ), следовательно вопрос - как изменять >размер буфера в соответствии с кол-вом инф-ии во входном файле? > >#include <stdio.h> > >int main(void) >{ > FILE *stream; > FILE *stream2; > char buf[200]; // тут размер буфера указывается > > //read data from file > > if ((stream = fopen("data.in", "r")) //читаю файл > == NULL) > { > fprintf(stderr, "Cannot open output file.\n"); > return 1; > } > fread(buf, 200, 1, stream); > printf( "%s", buf ); //все ок, распечатывает то что >надо > > //write data to another file > > if ((stream2 = fopen("data.out", "wb")) == NULL) > > { > fprintf(stderr, "Cannot open output file.\n"); > return 1; > } > > fwrite(buf, sizeof(buf)+1, 1, stream2); //пишет нормально, но в конце >много мусора добавляет > fclose(stream2); > return 0; >} Сравни размеры файлов stream и stream2, если stream менее 200 байт (напрмер 150 байт), то соответственно в stream2 ты запишешь данные + мусор (150 байт данных и 50 байт мусора) 1. есть вариант тупо занулить массив перед чтением :) тогда в качестве мусора будут 0 2. определить размер stream и если он менее 200 байт,тогда писать только столько сколько нужно, а нужно именно размер stream :)
|