Define 'proper' type system; C is a static, strongly typed language, with the important feature that the type system is simple enough for an inexperienced programmer to understand and be capable of implementing.
I'm pretty sure C is considered weak in it will automatically cast from one type to another.
C's "types" are just interchangeable methods of interpreting a pile of bits. That's not a strong type system, that's types on the honor system.
C's type system is restrictive enough to get annoying occasionally, but doesn't protect you from loads of things it could, since it is not strongly typed.