malloc() takes a single argument (memory required in bytes), while calloc() needs two arguments.
calloc() initializes the allocated memory to ZERO and malloc does not
calloc() allocates a memory area, the length will be the product of its parameters.
ptr = (char **) malloc (20); // allocates 20 bytes of memory
ptr = (char **) calloc (20, sizeof(char*)); // allocates 100 bytes assuming the pointer size is 4
Which one is better is dependent on context none is better or worse.