C is not memory-safe
C assumes you know what you are doing. If you do not, go back to Pascal or Basic and learn how to program.

C cannot be garbage-collected efficiently
This is a Good Thing(TM). Garbage collectors are for lazy programmers.

C has poor support for dynamic data structures
So make them. C gives you basic, flexible data types. If you want something more complex, build it.

C is weakly typed
Another Good Thing(TM). Data is data, I should be able to do with it what I like. A programming language should not get in the way, if it does, it's little more than a toy, as Pascal is.

C is difficult to optimize
Good programmers should be able to optimize better than a compiler. As for anything else on this topic, I'll leave to those more versed in compiler design than I.