Вы должны очистить свои входные данные перед отображением такой строки.
Поскольку у вас есть %xxx
- строка, printf
интерпретирует их как потенциальные аргументы, а затем попытается получить их, следовательно,основной дамп.Но это идет дальше, так как это может означать атаки безопасности через этот механизм.В некотором смысле, это эквивалент C-инъекций SQL.
Как и @TypeIA, правильный способ сделать это - рассмотреть buffer
в качестве аргумента строки форматирования (printf("%s", buffer)
), а несама строка форматирования.Это также причина, по которой некоторые компиляторы будут предупреждать, если вы создадите функцию с аргументами ( char * format, ... );
(не const).