tlx
Loading...
Searching...
No Matches
ssprintf.cpp
Go to the documentation of this file.
1/*******************************************************************************
2 * tlx/string/ssprintf.cpp
3 *
4 * Part of tlx - http://panthema.net/tlx
5 *
6 * Copyright (C) 2007-2019 Timo Bingmann <tb@panthema.net>
7 *
8 * All rights reserved. Published under the Boost Software License, Version 1.0
9 ******************************************************************************/
10
12
13#include <cstdarg>
14#include <cstdio>
15
16namespace tlx {
17
18std::string ssprintf(const char* fmt, ...) {
19 std::string out;
20 out.resize(128);
21
22 va_list args;
23 va_start(args, fmt);
24
25 int size = std::vsnprintf(
26 const_cast<char*>(out.data()), out.size() + 1, fmt, args);
27
28 if (size >= static_cast<int>(out.size())) {
29 // error, grow buffer and try again.
30 out.resize(size);
31 size = std::vsnprintf(
32 const_cast<char*>(out.data()), out.size() + 1, fmt, args);
33 }
34
35 out.resize(size);
36
37 va_end(args);
38
39 return out;
40}
41
42std::string ssnprintf(size_t max_size, const char* fmt, ...) {
43 std::string out;
44 out.resize(max_size);
45
46 va_list args;
47 va_start(args, fmt);
48
49 int size = std::vsnprintf(
50 const_cast<char*>(out.data()), out.size() + 1, fmt, args);
51
52 if (static_cast<size_t>(size) < max_size)
53 out.resize(static_cast<size_t>(size));
54
55 va_end(args);
56
57 return out;
58}
59
60} // namespace tlx
61
62/******************************************************************************/
std::string ssnprintf(size_t max_size, const char *fmt,...)
Helper for return the result of a snprintf() call inside a std::string.
Definition: ssprintf.cpp:42
std::string ssprintf(const char *fmt,...)
Helper for return the result of a sprintf() call inside a std::string.
Definition: ssprintf.cpp:18