* Undefined behavior, there are apparently over 100 of them. I can probably name about 5, maybe 10. Will the compiler warn me if I accidentally trigger undefined behavior? Of course not, it assumes that I am super-human who never makes a mistake.
* Code sharing using '#include', god I hate 'em.
* No namespaces, which means a single global namespace for all functions.
* Strings: every time I have to manipulate strings in C, I want to shoot myself.
* Arrays decaying into pointers, very clever, causing so much misery.
* Array length decoupled from the array pointer. No way to pass around both of them together, and checked automatically by the compiler.
* The C preprocessor #define magic. Love 'em when they are mine, hate 'em when they are someone else's. Hate 'em even more when they are mine 6 months later.
* The #define/#ifdef spaghetti code. There ought to be better ways to support multiple architectures.
Those are just off the top of my head. I'm sure I could come up with a few more items.