Как отмечает @Christian Gibbons в своем комментарии, binary
не инициализируется, когда вы вызываете strlen
. Но что это значит?
strlen
обходит массив, начиная с первого элемента, считая не заканчивающиеся символы. Он не останавливается, пока не найдет завершение ('\0'
). Если вам не повезло, это может быть длинным путем в неинициализированных данных, и, вероятно, будет далеко за 81 выделенный вами символ. Через некоторое время strlen начинает смотреть на память, которой не разрешено, и вы получаете ошибку сегментации (ваша программа исследована за пределами выделенного сегмента памяти).
Вы можете решить эту проблему несколькими способами. Самое простое:
char binary[81] = { 0 };
Это просит компилятор установить первый элемент на ноль (завершающий символ). Это хорошо, потому что это первый символ, который strlen увидит и сразу остановит, сообщив, что ваша строка имеет длину 0.
Но, взглянув на ваш алгоритм, вы можете просто отказаться от вызова strlen и выполнить:
size_t len = 0;
Но даже если вы воспользуетесь этим подходом, хорошей практикой будет инициализация ваших буферов безопасными значениями в любом случае.