Посмотрите на логику вашей программы в функции modify
.Если вы найдете гласный, вы устанавливаете *vow = 0
, если это не было 0 раньше.На следующем шаге, если вы не найдете гласную, вы получите *vow
, что является нулевым байтом.После этого вы устанавливаете *vow = *ch
.
Таким образом, всегда, когда он не находит гласную и ранее находил гласную, а перед ней не гласную, печатается 0-байт.
Переосмыслите свою логику:)
Или просто измените
if (*vow != *ch)
putchar(*vow)
на
if (*vow != *ch)
if (*vow) putchar(*vow);