If C had originally been designed with a proper String data type to begin with, then none of these bugs would have ever happened.
I think that's placing the blame with the hammer instead of with the carpenter. There are functions in the standard C libraries that deal correctly with buffer overflows for almost all of the ``standard'' string functions, but programmers are either too lazy to use them or too lazy to know that they're there.
Besides, isn't MS Windows' system language C++, anyway? There
is a standard string data type in C++.