use snprintf - no need to leave openings for possible buffer overruns