我想使用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;
}
答案 0 :(得分:-1)
您不需要编写自己的函数,而应使用asprintf()。
但是请注意,它是USE_GNU的东西。
记住要free()