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

Для использования рассмотрите этот пример фрагмента кода:

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 

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