Никто не ответил на настоящий «вопрос» здесь: вы преобразовываете int в char правильно; в таблице ASCII десятичное значение 01 является «началом заголовка», непечатаемым символом. Попробуйте найти таблицу ASCII и преобразовать значение int между 33 и 7E; который даст вам персонажей, на которые нужно смотреть.
Один аспект, который может быть рассмотрен при наличии проблем / повышенных усилий в отношении тестирования, заключается в том, есть ли возможность изменить тестируемую программу каким-либо образом, что поможет в тестировании без существенного увеличения сложности кода. [110 ]
В этом случае есть ли возможность заменить вызовы exit () на коды возврата ошибок из функций, чтобы вызывающие абоненты могли выполнять такие действия, как приведение в порядок или состояние журнала, перед тем, как фактически завершить работу? Если это так, то это одновременно упрощает тестирование и, вероятно, упростит поиск ошибок, когда код фактически используется в выпуске / производстве, так как может быть довольно сложно понять, почему программа просто «взлетает» и умирает, особенно если код спрятан в библиотечной функции!
Просто, чтобы вы знали, что искать, то, что вы хотите сделать, это «высмеять» вызов exit()
. Основная идея состоит в том, чтобы выбрать другую реализацию для функции выхода, как правило, во время компиляции. Честно говоря, C не делает это особенно легко, но есть несколько вариантов с различными уровнями переносимости и навязчивости.
В этой статье описывается что-то довольно портативное, но и довольно навязчивое. По сути, вы используете макросы и / или указатели функций для переключения назад и вперед, что означает небольшую модификацию вашего кода, но, честно говоря, это не так уж сложно.
Для чего-то потенциально менее навязчивого, но и гораздо менее переносимого, в этой статье есть пара идей (я думаю, что оба будут работать на MacOS). Здесь вы получаете компоновщик для перенаправления вызова exit()
на другую функцию, которую вы предоставляете. Хорошей новостью является то, что он не требует каких-либо изменений в вашем коде. Плохая новость заключается в том, что он требует от вас взаимодействия с компоновщиком и не будет работать везде (LD_PRELOAD
не будет работать в Windows, а AFAIK --wrap
требуется GNU ld или что-то совместимое).