Функция 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`.
Другие вопросы по тегам