По на си решето.

В С++ есть std::string, который не подвержен данным ошибкам.

Есть интересная книжечка, вроде защитное программирование, в ней описываются как раз данные ошибки в языке си. Но самое смешное, что в ней даётся только одно решение всех проблем. Переходить на другой язык.