有没有一种方法可以自动实现sprintf的缓冲区分配?

时间:2019-09-04 04:43:38

标签: c++

我想使用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;
}

1 个答案:

答案 0 :(得分:-1)

您不需要编写自己的函数,而应使用asprintf()。

但是请注意,它是USE_GNU的东西。

记住要free()