我怎样才能发现格式化后的字符串的总大小?举例来说:第一个月我需要分配一个字符串来调用sprintf或snprintf来填充该字符串,但我不想假设一个值,如4096或其他固定值。我怎样才能发现格式化后的字符串的总大小?举例来说:"<xml id=\"%d\">%s</xml>"个我需要分配一个字符串来调用sprintf或snprintf来填充该字符串,但我不想假设一个值,如4096或其他固定值。
sprintf
snprintf
"<xml id=\"%d\">%s</xml>"
5kgi1eie1#
这可以通过调用snprintf两次来完成。第一次,我们称之为传递NULL作为缓冲区,零作为大小:
int size = snprintf(NULL, 0, "<xml id=\"%d\">%s</xml>", report_id, report_content) + 1;
字符串在字符串的末尾使用+1非常重要,因为我们需要考虑字符串末尾的\0字符现在我们可以分配正确大小的缓冲区:
+1
\0
char *buffer = malloc(size * sizeof *buffer);
型现在,最后,我们用我们创建的缓冲区调用snprintf:
snprintf(buffer, size, "<xml id=\"%d\">%s</xml>", report_id, report_content);
型在对snprintf的两次调用中使用相同的字符串和参数也非常重要
1条答案
按热度按时间5kgi1eie1#
这可以通过调用
snprintf
两次来完成。第一次,我们称之为传递NULL作为缓冲区,零作为大小:
字符串
在字符串的末尾使用
+1
非常重要,因为我们需要考虑字符串末尾的\0
字符现在我们可以分配正确大小的缓冲区:
型
现在,最后,我们用我们创建的缓冲区调用
snprintf
:型
在对
snprintf
的两次调用中使用相同的字符串和参数也非常重要