Why does calloc require two parameters and malloc just one?
c, memory-management
Solution
Historical reasons.
At the time of when `calloc` was introduced, the `malloc` function didn't exist and the `calloc` function would provide the correct alignment for one element object.
When `malloc` was introduced afterwards, it was decided the memory returned would be properly aligned for any use (which costs more memory) and so only one parameter was necessary. The API for `calloc` was not changed but `calloc` now also returns memory properly aligned for any use.
EDIT:
See the discussion in the comments and the interesting input from @JimBalter.
My first statement regarding the introduction of `malloc` and `calloc` may be totally wrong.
Also the real reasons could also be well unrelated to alignment. C history has been changed a lot by compiler implementers. `malloc` and `calloc` could come from different groups / compilers implementers and this would explain the API difference. And I actually favor this explanation as the real reason.
Problem
It's very bothersome for me to write `calloc(1, sizeof(MyStruct))` all the time. I don't want to use an idea like wrapping this method and etc. I mean I want to know what two parameters gives me? If it gives something, why doesn't `malloc`have two parameters too? By the way, I searched for an answer to this question but I didn't find a really good answer. Those answers was that `calloc` can allocate larger blocks than `malloc` can and etc. I saw another answer that `calloc` allocates an array. With `malloc` I can multiply and I'll get an array and I can use it without `1,` at the start.