Ever had the problem of wanting to use (s)printf to format a string into an STL/StdC++ std::string instance? The only thing STL says is, "use strstream", which I don't agree with ... (s)printf is easier to use once you get used to the %s stuff, and often cleaner to read. Thus, I wrote my own method ... maybe I just used to much String.format() in Java ;-)
StringUtils.hh
#ifndef STRINGUTILS_HH_ #define STRINGUTILS_HH_ #include <string> std::string formatString(const char* format, ...); #endif /*STRINGUTILS_HH_*/
StringUtils.cc
#include "StringUtils.hh" #include "BufferUtils.hh" #include <stdarg.h> using std::string; /** No need to be afraid about memory leaks, segfaults or buffer overflows (hopefully) - the 2kB buffer is freed on return (destructor) - the std::string is instantiatedbefore the buffer is freed, and returned on the stack - vsnprintf checks the buffer length, and the last char is ensured to be a '\0' */ std::string formatString(const char* format, ...) { Buffer buffer(2048); va_list vl; va_start(vl, format); vsnprintf(buffer, buffer.bufferSize(), format, vl); buffer[buffer.bufferSize()-1] =0; return string(buffer); }
No comments:
Post a Comment