const char *fmt = "sqrt(2) = %f";
int sz = std::snprintf(nullptr, 0, fmt, std::sqrt(2));
std::vector<char> buf(sz + 1); // note +1 for null terminator
std::snprintf(&buf[0], buf.size(), fmt, std::sqrt(2));

调用snprintf时,如果传入空指针和0大小的buf_size,返回值是格式化后结果的大小。这个是C++下的写法。

const char *fmt = "sqrt(2) = %f";
int sz = snprintf(NULL, 0, fmt, sqrt(2));
char buf[sz + 1]; // note +1 for terminating null byte
snprintf(buf, sizeof buf, fmt, sqrt(2));

这个是纯C的。

https://en.cppreference.com/w/cpp/io/c/fprintf

# include < stringtools> using namespace str ; std::string text = format( " hello %s " )( " world " ); std::vector<std> v = split( " , " )( " hello, world " ); std::string hw = join( " " )(v); print ( " abc: " , 1 , 2 , 3 ); // abc: 1 2 3 std::map<std>,std::vector< int>> m{ {{ " one " , true },{ 1 }}, {{ " two " , 0 int sn printf ( char *restrict buffer, int bufsz, const char *restrict format, ... );(C99起) 其中restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问 一个 数据对象的唯一且初始的方式.... 1.http://stackoverflow.com/questions/2342162/stdstring-formatting-like-s printf You can't do it directly, because you don't have write access to the underlying buffer (until C++ 11; see Dietrich Epp's co... 我们可以使用可变参数模板+定义 一个 字符串格式化函数// std::string的字符串格式化函数 template < typename . . . Args > static std :: string str_format(const std :: string & format , Args . . . args) {if(! sn printf 最近使用 sn printf 遇到了 一个 坑 , 下面是 sn printf 的函数声明。 int sn printf (char *str, size_t size, const char *format, ...); 我使用的场景如下,当items 结构很多的时候,程序就崩溃了,开始查找了很久,最后发现是 sn printf 的使用问题。 sn printf 我先入为主的认为它的返回值 像 rea... int sn printf (char *restrict buf, size_t n, const char * restrict  format, ...); 函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加 一个 0。所以如果目标串的大小为n 的话,将不会溢出。 函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。 int main() 函数原型:int sn printf (char* dest_str,size_t size,const char* format,...); 所需头文件:#include<stdio.h> 函数功能:先将可变参数 “…” 按照format的格式格式化为字符串,然后再将其拷贝至dest_str中。 注意事项:如果格式化后的字符串长度小于size,则将字符串全部拷贝至dest_s... 在编程过程中经常有字符串转数字和数字转字符串,相应的函数大家最经常见到可能是atoi和itoa。但是itoa不是标准库里面的函数,所以接下来介绍下面两个函数s printf sn printf 函数,并将它们比较一番。 s printf ()函数 int s printf (char *strin...