I know that stringstreams are the C++ recommended way to create formatted text. However, they can often become quite verbose, especially when compared to the succinct format strings of `printf` and family. However, the `printf` family can lead to its own issues, with buffer overflow issues, and so I would rather not use these functions directly My goal was to make a function to behave similarly to `snprintf`, but return a `std::string`, avoiding any chance of buffer overflow. Knowing that there are many pitfalls to string manipulation in C++, have I exposed myself to any errors in using this function? EDIT: At vnp's suggestion, using a char* as input to allow for additional type-checking, and having a workaround for alternative `vsnprintf` behavior. #include <cstdio> #include <cstdarg> #include <string> __attribute__((format (printf, 1, 2))) std::string string_sprintf(const char* format, ...){ static const int initial_buf_size = 100; va_list arglist; va_start(arglist, format); char buf[initial_buf_size]; int len = vsnprintf(buf,initial_buf_size,format, arglist); va_end(arglist); if(len+1<initial_buf_size){ return buf; } else if(len==-1){ //VS2013 returns -1 for too long strings long buf_size = initial_buf_size; while(len==-1){ buf_size *= 10; char long_buf[buf_size]; va_start(arglist,format); len = vsnprintf(long_buf,buf_size,format,arglist); va_end(arglist); if(len>0){ return long_buf; } } } else { char long_buf[len+1]; va_start(arglist,format); vsnprintf(long_buf,len,format,arglist); va_end(arglist); return buf; } }