Добро пожаловать в Stackoverflow!
Учитывая точное описание вашего задания, я бы не стал использовать буфер; Вы можете просто читать из входного файла по одному байту за раз и записывать каждый третий байт в выходной файл. Это позволяет избежать каких-либо накладных расходов на управление буфером.
Но, если вы читаете из входного файла в буфер, вам не нужно каким-либо образом изменять этот буфер, а также вам не нужен второй буфер. После прочтения всех данных просто переберите входной буфер и выведите каждый третий байт в выходной файл.
Но, если вы хотите / должны каким-то образом повторно использовать вывод, вы можете просто заполнить второй буфер из входного буфера тем же способом (перебрать входной буфер, пропуская два байта на каждую итерацию), а затем записать этот второй буфер для выходного файла. (Таким образом, у вас все тот же вывод во втором буфере, и вы можете использовать его каким-либо образом.)
Ваш подход диктует лучшие функции для использования. Я вижу, вы уже знаете о open()
. Читайте о read()
, write()
и close()
, а также читайте о fopen()
, fgetc()
, fgets()
, fread()
, fwrite()
и fclose()
. Читая об этих различных функциях, о том, как они похожи друг на друга, как они отличаются друг от друга, а также о плюсах и минусах каждой из них, можно многому научиться. Чтение о них приведет вас к изучению других связанных с файлами операций (таких как поиск, перемотка и т. Д.), Которые пригодятся вам, когда вы узнаете больше о C и программировании в целом.
Обратите внимание, что для подходов, использующих буферы, вы должны быть очень осторожны относительно размера ваших буферов по сравнению с размером входного файла. Здесь много подводных камней. Если это задание для какого-то класса, то эти соображения могут появиться в последующих уроках / заданиях, и, возможно, это слишком много, чтобы принять их прямо сейчас. Но никогда не бывает слишком рано думать о том, что вы делаете, и не знаете о том, что ваша программа должна обработать.