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

waxmsbnn  于 2023-11-17  发布在  其他
关注(0)|答案(1)|浏览(148)

我怎样才能发现格式化后的字符串的总大小?
举例来说:
第一个月
我需要分配一个字符串来调用sprintfsnprintf来填充该字符串,但我不想假设一个值,如4096或其他固定值。
我怎样才能发现格式化后的字符串的总大小?
举例来说:
"<xml id=\"%d\">%s</xml>"
我需要分配一个字符串来调用sprintfsnprintf来填充该字符串,但我不想假设一个值,如4096或其他固定值。

5kgi1eie

5kgi1eie1#

这可以通过调用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的两次调用中使用相同的字符串和参数也非常重要

相关问题