Мне трудно понять, зачем вам нужен asprintf. Здесь в руководстве это говорит
Функции
asprintf()
иvasprintf()
являются аналогамиsprintf(3)
иvsprintf(3)
, за исключением того, что они выделяют строку, достаточно большую для хранения вывода, включая завершающий нулевой байт, и возвращают указатель на него через первый аргумент, Этот указатель должен быть переданfree(3)
чтобы освободить выделенное хранилище, когда оно больше не нужно.
Вот пример, который я пытаюсь понять:
asprintf(&buffer, "/bin/echo %s is cool", getenv("USER"));
Какая разница, если буфер выделяет строку, достаточно большую по сравнению со словами char * = (string)