将double转换为字符串而不分配超出要求的内存的正确方法?

Que*_*ura 0 c string double

我想知道正确的方法是将未知值大小的双倍转换为字符串而不分配太多内存.有没有办法弄清楚双倍的数字?我不想分配太多或太少的内存.

Dav*_*eri 5

您可以使用NULL第一个参数snprintf来获取大小:

C99允许str为NULL并且返回值(一如既往)为在输出字符串足够大的情况下写入的字符数.

然后malloc:

int main(void)
{
    double num = 3.14;
    size_t len;
    char *str;

    len = (size_t)snprintf(NULL, 0, "%f", num) + 1;
    str = malloc(len);
    snprintf(str, len, "%f", num);
    puts(str);
    free(str);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)