Your Language Sucks
wiki.theory.org
wiki.theory.org
Manual memory management can get tiring. Only if you don't exercise.
String handling is manual memory management. See above. See above.
The support for concurrent programming is anemic. Introducing C11 and OpenMP!
Terribly named standard functions: isalnum, fprintf, fscanf, etc. Beauty is subjective.
The preprocessor is the best thing ever.
Not feeling your smartest today? Have a segfault. Can I have another?
Lack of good information when segfault occurs... the "standard" GNU toolchain doesn't tell you the causes of segfaults in the standard runtime. Enable debug mode.
If that code is legacy, you're in for two days of not looking like a hero. Luckily there are 137 alternatives.
:-)
Python: There is no "do ... until <condition>". Most languages don't have this either.
C#: i++.ToString works, but ++i.ToString does not. When would you ever need this?
Ruby: Suffix-conditions after whole blocks of code. Just don't do that.
Java: unused keywords, such as goto and const. Do you really need to name your variables goto and const?
Some criticisms do point out fundamental limitations and flaws, but most of the time this is by design and the solution is to use a different language. For instance, C has manual memory management, Python uses indentation for nesting, and Haskell uses lazy evaluation. Only a few are potential fixes in future language versions or forks (e.g. HashMap literals for Java... which I thought had been introduced in version 8, but I guess not).
-1 lacks LISP