Написать программу на языке С или С++
a. Задача считается решённой, если необходимое по варианту действие выполняется для всех допустимых входных данных.
b. Для работы с файлами и консолью должны использоваться только специфичные для ОС функции из соответствующего API. Использование кроссплатформенных аналогов из языка C/C++ не допускается. Например, вывод в консоль в Linux следует делать с помощью системного вызова write, а не функции printf.
c. Программа должна корректно завершаться, не вызывая аварийный останов.
d. Программа должна брать входные данные из аргументов, переданных при запуске в консоли. В случае, если количество переданных аргументов не равно ожидаемому, программа должна вывести подсказку для пользователя, поясняющую правила её (программы) использования.
e. Возвращаемые значения всех вызываемых функций должны проверяться на предмет возникновения ошибок. В случае возникновения ошибки необходимо вывести сообщение, оповещающее пользователя о произошедшем, содержащее в обязательном порядке код ошибки и её текстовое описание. В случае, если в результате возникшей ошибки программа должна быть завершена, перед завершением необходимо освободить все занятые ресурсы (очистить выделенную память, закрыть открытые файлы).
f. Программа должна работать с любым количеством данных. Если размер выделенного буфера меньше размера данных, которые необходимо считать или записать, буфер необходимо использовать повторно (в цикле).
Дополнительное задание (обязательно к выполнению): изучить назначение и принцип работы функций HeapAlloc и HeapFree из WinAPI. В процессе разработки программы для Windows для выделения и освобождения памяти вместо средств языка (таких как malloc/free или new/delete) использовать данные функции. В качестве первого аргумента передавать значение, возвращённое из функции GetProcessHeap.