char array[1000] = "";
is equivalent to
char array[1000] = { '\0' }; // zero length string
Moreover
T t[1000] = { N };
is equivalent to
T t[1000] = { N, 0, 0, 0 ..., 0 ,0 }; // filled up to 1000 elements with zeros
So in your case, the first array is initialised with 1000 zeros and the second one contains 1000 uninitialised char
s.
If your intention is to immediately initialise the content with something else, then the second case could be accepted.
char array[1000]; // not initialised yet
sprintf(array, "%d %s", an_integer, a_string); // now it is
Otherwise, if you expect the array to be read immediately, it is safe to initialise it immediately too.
char array[1000] = ""; // the string in array must be terminated
strcat(array, " append this"); // in order to append something