Описание тега asprintf

Используйте этот тег для вопросов о функциях расширения C asprintf и vasprintf для безопасного для памяти форматирования данных.

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, за исключением того, что выделенный буфер не предоставляется функции, а выделяется ею. Буфер выделяется динамически, поэтому он также должен быть явноfreed. Возвращаемое значение - это длина выделенного буфера, и буфер возвращается через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

Дополнительные ресурсы