Функция asprintf в C, что она делает?
В настоящее время я делаю Эксплойт-Упражнения на уровне 02, где в скрипте я вижу функцию под названием "asprintf",asprintf(&buffer, "/bin/echo %s is cool" , getenv("USER"));
буфер = ноль; до этого вызова функции.
Пожалуйста, объясните мне на простом английском языке, что делает эта функция и почему она есть. Я знаю, что есть еще один пост, в котором говорится об этом, но это мне не сильно помогло. (и ДА я прочитал справочную страницу!)
Пожалуйста, не игнорируйте и не удаляйте вопрос, это не первый раз (сообщение модераторам).
2 ответа
Я думаю asprintf
Функция, которую вы упоминаете, является вариантом sprintf
это специфично для стандартной библиотеки glibc. Первый аргумент функции не является указателем на массив символов, как sprintf
, но указатель на char *
переменная, которая будет содержать адрес недавно выделенного char
массив. Это asprintf
функция делает так же, как sprintf
но вместо того, чтобы работать с фиксированным размером char
массив, он выделяет место для строки, которую он строит. Массив, выделенный asprintf
должен быть освобожден, в более поздний момент, вызывающим.
Видимо, вы ищете пример использования asprintf
:
char *buffer = NULL;
if (asprintf(&buffer, "The counter is %d\n", 42) < 0)
{ perror("asprintf failed"); exit(EXIT_FAILURE); };
// now buffer points to a heap allocated string "The counter is 42\n".
printf("%s", buffer); // print the string on the terminal
free(buffer); // free the buffer allocated by `asprintf`.