Хорошо, предполагая, что два случая следующие (чтобы избежать ошибок компилятора):
char str1[32] = "\0";
char str2[32] = "";
Как говорили люди, str1 инициализируется двумя нулевыми символами:
char str1[32] = {'\0','\0'};
char str2[32] = {'\0'};
Однако, в соответствии со стандартами C и C ++, если часть массива инициализируется, то остальные элементы массива инициализируются по умолчанию. Для символьного массива все остальные символы инициализируются нулями (т.е. нулевыми символами), поэтому массивы действительно инициализируются как:
char str1[32] = {'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0'};
char str2[32] = {'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0',
'\0','\0','\0','\0','\0','\0','\0','\0'};
Итак, в конце концов, между ними действительно нет никакой разницы.