The standard is not very clear about the strings inside text frames.
I never terminated the strings for ID3v2.3.0 text frames and never got trouble with it.
It might be different with ID3v2.4.0.
One thing is clear: Having NULL as last character is valid.
ffmpeg stores all strings in text frames NULL-terminated. It uses the ID3v2.4.0 standard.
audacity also terminates the strings. It also uses ID3v2.4.0
The standard is not very clear about the strings inside text frames. I never terminated the strings for ID3v2.3.0 text frames and never got trouble with it. It might be different with ID3v2.4.0. One thing is clear: Having NULL as last character is valid.