Используйте этот тег для вопросов о C asprintf и vasprintf дополнительных функциях для безопасного от памяти форматирования данных.
asprintf
общая функция времени выполнения C, обеспеченная как расширение Стандартной библиотеки для C. Это было первоначально обеспечено GLIBC, но с тех пор превратило свой путь во множество обеспеченных поставщиками библиотек времени выполнения C. Сторонние реализации существуют для фактически каждой платформы.
asprintf
назвали variadic версию 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
Дополнительные ресурсы