just use vsnprintf