Я пытаюсь понять некоторый C-код, с которым я столкнулся.Для записи, код делает именно то, что должен, за исключением строки печати, которую я добавил.Он берет все содержимое из inputFile.txt
, заменяет J на X и записывает его в outputFile.txt
.
int main(void) {
int fd_to_read = open("inputFile.txt", O_RDONLY);
int fd_to_write = open("outputFile.txt", O_WRONLY | O_CREAT);
char c;
int bytes;
while ((bytes = read(fd_to_read, &c, sizeof(c))) > 0) {
if (c == 'J') {
c = 'X';
}
write(fd_to_write, &c, sizeof(c));
//I added this and it doesn't work.
printf(&c);
}
close(fd_to_read);
}
Когда я впервые увидел это, я ожидал, что цикл while будет печататьпервый символ из файла снова и снова.Я понимаю, что функция read()
будет выполняться до тех пор, пока она не станет >0
, но я предположил, что для того, чтобы изменить позицию в файле, адрес памяти, на который указывает c
, должен был бы быть увеличен на что-то, возможно,sizeof(c)
, но ничего не увеличивается, а просто переходит к следующей букве в файле.Мое следующее предположение заключается в том, что read()
обрабатывает это самостоятельно, но когда я пошел печатать содержимое &c
, я приблизился к тому, что ожидал, что представляло собой тонну мусора, поскольку он просто печатал случайные вещи из памятипо существу.
Итак, два вопроса на самом деле.
Как &c
, записываемый в outputFile.txt
, записывает в него корректно, не увеличивая адрес c
?
Как бы я просто напечатал отдельные символы из файла без всякой фигни, так как print(&c)
добавил всю фигню после каждого символа?