Описание тега asprintf
asprintf
- это обычная функция времени выполнения C, предоставляемая как расширение стандартной библиотеки C. Первоначально он был предоставлен GLIBC, но с тех пор превратился во множество предоставляемых поставщиками библиотек времени выполнения C. Сторонние реализации существуют практически для каждой платформы.
asprintf
имеет вариативную версию, называемую vasprintf
, что соответствует стандарту vsprintf
функция, взяв asprintf
семантика для буфера и возвращаемого значения. В дальнейшем оба будут просто называтьсяasprintf
, за исключением случаев, когда есть различия, которые стоит отметить.
В средах GLIBC, таких как Linux, asprintf
доступен из stdio.h
, как и его sprintf
аналог, как таковой:
#include <stdio.h>
Другие библиотеки, и в частности сторонние библиотеки, требуют включения других файлов заголовков для использования asprintf
.
Сигнатуры функций:
int asprintf(char **strp, const char *fmt, ...);
int vasprintf(char **strp, const char *fmt, va_list ap);
В asprintf
может использоваться аналогично стандарту C sprintf
, за исключением того, что выделенный буфер не предоставляется функции, а выделяется ею. Буфер выделяется динамически, поэтому он также должен быть явноfree
d. Возвращаемое значение - это длина выделенного буфера, и буфер возвращается черезstrp
. В случае неудачи возвращаемое значение-1
, а содержимое strp
не определены.
Для использования рассмотрите этот пример фрагмента кода:
char *str = NULL;
int size = asprintf(&str, "this is a %s", "test");
printf("%s\n", str); // this is a test
printf("%d\n", size); // 14
free(str);
Это напечатает следующее:
this is a test
14
Дополнительные ресурсы