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