有没有办法自动实现 sprintf 的缓冲区分配?

Is there a way to implement sprintf's buffer allocation automatically?

本文关键字:sprintf 缓冲区分配 实现 有没有      更新时间:2023-10-16

我想使用 mysprintf (( 而不是 sprintf (( 来自动分配缓冲区大小。

mysprintf(( 有任何问题吗?或者你能推荐一个更好的方法吗?

char s[256];
sprintf(s, "%s-%s-%s", "abcdefg", "abcdefg", "abcdefg");
string s = mysprintf("%s-%s-%s", "abcdefg", "abcdefg", "abcdefg");
string mysprintf(const char* format, ...)
{
int ret;
char* buf;
va_list ap;
va_start(ap, format);
ret = vasprintf(&buf, format, ap);
va_end(ap);
if (ret == -1) {
return {};
}
string out(buf);
free(buf);
return out;
}

你不需要编写自己的函数,而是使用 asprintf((。

但请注意,这是一个USE_GNU的东西。

记得自由((