Let he who is without sin cast the first stone. I don't think there's a single C programmer (competent or incompetent) who hasn't trashed a string pointer or overwritten a string bounds.Guilty as charged.
Sure, every single programmer who's ever made that mistake smacks themselves in the forehead and blames themselves. But think of all the saved foreheads there'd be if C had a proper string data type.... and strong typing and array bounds checking, etc. The thing is, there is a need for a language that doesn't have all these features because they carry a performance penalty, C fills this space. I have to agree with Kureg, though, many projects currently written in C are better off using something else...
The thing that prompted my initial comment (about the incompetent programmers) is that a lot of those mistakes can be easily avoided (even in C) with good programming discipline. All it takes is to
always check your buffer sizes, function return values, etc.
Regards,
Borislav