The initialization does have null termination, it's a string in quotes!
c=*p sets c to the current value pointed to by p - and that value is interpreted as true or false for purposes of whether the loop keeps going. As long as c is not 0, that's true and the loop keeps going. When it hits the null terminator, c gets set to 0, which is false, so the loop ends at that point.