source of highlighter
plain | download
    1 #include <string>
    2 #include <cstdio>
    3 #include <cstdarg>
    4 
    5 int sprintf (std::string &dest, const char *fmt, ...)
    6 {
    7         int len;
    8         va_list ap;
    9 
   10         if (dest.capacity () > dest.length ()) {
   11                 dest.resize (dest.capacity ());
   12         }
   13 
   14         va_start (ap, fmt);
   15         len = vsnprintf (const_cast<char *> (dest.c_str ()), dest.capacity (),
   16                          fmt, ap);
   17         va_end (ap);
   18 
   19         if (len > 0 && static_cast<size_t> (len) >= dest.capacity ()) {
   20                 dest.resize (len + 1);
   21                 va_start (ap, fmt);
   22                 len = vsnprintf (const_cast<char *> (dest.c_str ()),
   23                                  dest.capacity (), fmt, ap);
   24                 va_end (ap);
   25         }
   26 
   27         dest.resize (len);
   28 
   29         return len;
   30 }
   31 
   32 int main ()
   33 {
   34         std::string r;
   35         int len;
   36 
   37         len = sprintf (r, "%i %s %i", 32, "kokot", 23);
   38         printf ("%i %s %i\n", len, r.c_str (), r.length ());
   39         return 0;
   40 }
   41