fpath is an array. You should not try to demote it to a string and then replace characters in it with newlines.
With ksh-like array expansion syntax:
$ printf '%s\n' "${fpath[@]}" /usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.7.1/functions
With zsh, you can also use "$fpath[@]" or "${(@)fpath}".
You can also do:
$ printf '%s\n' $fpath /usr/local/share/zsh/site-functions /usr/share/zsh/site-functions /usr/share/zsh/5.7.1/functions
But note that it skips empty elements of the array (likely not a problem for $fpath).
zsh's print builtin can also print elements one per line with the -l option. Like in ksh where the print builtin comes from, you do need the -r option though to print arbitrary data raw, so:
print -rl -- $fpath
would be equivalent to the standard printf '%s\n'.
They differ from -C1 when $fpath is an empty list in which case print -rC1 -- $fpath outputs nothing while print -rl and printf '%s\n' output one empty line, so
print -rC1 -- "$array[@]"
is probably the closest to what you want to print elements of the array one per line which in bash/ksh you could write:
[ "${#array[@]}" -eq 0 ] || printf '%s\n' "${array[@]}"