Используйте этот тег для вопросов о функциях расширения 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
Дополнительные ресурсы