Вы правы.
В C строка - это массив символов, оканчивающийся символом с кодом ASCII 0.
Итак, сначала DestFile копируется в DestFile2
Затем выполняется сканирование справа, чтобы найти самое правое вхождение '.'
Возвращает указатель на соответствующий символ или ноль, если вхождение не найдено.
Итак, теперь у вас есть (пример имени: myfile.gz)
DestFile2
|- Ptr
v
M y f i l e . g z \0
Затем он сравнивает, соответствует ли строка, начинающаяся с Ptr .Z или .gz, и, если да, устанавливает значение символа, на которое указывает Ptr, на \ 0, эффективно обрезая строку.
После установки Ptr в \ 0 у вас теперь есть
M y f i l e \ 0 g z \ 0
Помните, что c думает, что строка завершена, когда мы достигаем \ 0, поэтому последнее переименование фактически говорит
rename("myfile.gz", "myfile");