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

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