C has been accused of being "cryptic". This is because of its heavy use of punctuation characters as operators. Most other high level languages tend to use english words where C uses a single character. In my opinion, this statement comes from people who don't know C but who have glanced at a C program. I believe that using punctuation rather than english keywords tends to make a program more readable. But obviously you have to know what the operators mean.
C is also often described as being tedious, requiring the programmer to write more code to accomplish a task than would be necessary in other high level programming languages. To a certain extent, this is often true. The actual constructs of the C programming language are very closely aligned with the instruction set available on most CPUs. Many tasks are not done automatically for the programmer, leaving it to the programmer's discretion as to whether those tasks are actually needed.
Another serious drawback to C is ... well, that it does what you tell it to do. Many programming languages are built with a layer of protection against mistakes made by programmers. The classic example is storing a 12 byte string into a 10 byte array. C won't stop you, and instead it will write the remaining 2 bytes where they don't belong. Other languages waste a lot of CPU power double-checking the actions of the program; C does not. The C programmer must write correct code, build in his or her own error checking, or spend a lot of time tracking down his or her own mistakes.