如何发现格式化字符串的大小

问题描述 投票:0回答:1

如何得知格式化后字符串的总大小?

例如:

"<xml id=\"%d\">%s</xml>"

我需要分配一个字符串来调用

sprintf
snprintf
来填充该字符串,但我不想假设一个值,例如 4096 或其他固定值。

如何得知格式化后字符串的总大小?

例如:

"<xml id=\"%d\">%s</xml>"

我需要分配一个字符串来调用

sprintf
snprintf
来填充该字符串,但我不想假设一个值,例如 4096 或其他固定值。

c string memory-management
1个回答
0
投票

这可以通过拨打

snprintf
两次来完成。

第一次,我们称之为传递 NULL 作为缓冲区和零作为大小:

int size = snprintf(NULL, 0, "<xml id=\"%d\">%s</xml>", report_id, report_content) + 1;

末尾有

+1
非常重要,因为我们需要考虑字符串末尾的
\0
字符

现在我们可以分配正确大小的缓冲区了:

char *buffer = malloc(size * sizeof(buffer));

现在,最后,我们用我们创建的缓冲区调用

snprintf

snprintf(buffer, size, "<xml id=\"%d\">%s</xml>", report_id, report_content);

在两次调用中使用相同的字符串和参数也非常重要

snprintf

© www.soinside.com 2019 - 2024. All rights reserved.