bueno, saludo antes que nada a todos, bien todos coinciden en algo, que es que es fin de cadena o un delimitador de cadena, bien, lo que yo puedo opinar a esto es lo siguiente:
Claro que hay diferencia entre la asignacion que realiza en:
char str[3]='\0';
y
char str[3]=0;
efectivamente en el primer caso lo que haces es asignar un delimitador de cadena o mas bien conocido como fin de cadena y la funcion que tiene este delimitador es el de poder diferenciar el contenido de una cadena de otra, esto es que si por ejemplo tienes la siguiente declaracion:
char str1[3]='\0', str2[3]='\0';
y lees str1 y su contenido actual sera "Hola"
y lees str2 y su contenido actual sera "AB"
que es lo que pasara, bien si realizas una impresion de cada una de estas variables lo que obtendras es lo siguiente:
HolaAB cuando realizas printf("%s", str1);
y
AB cuando realizas printf("%s", str2);
por que es esto, bien aqui entra el delimitador de fin de cadena, como mensione su funcion es de establecer finales de cadenas y al ser revasado este por el contenido, la siguiente cadena se pega a la primera leida y asi sucesivamente pero por el contrario si tu no te pasas de estos valores que es lo que pasara, pues que te imprima lo correcto tal y como se escribio.
en el caso de que tu tengas la otra declaracion
char str[3]=0;
como sabemos todo caracter tiene un valor ascii y este suele ser reflegado con un valor entero el cero muchas veces suele representar el NULL o puede ser un valr nuemrico, seria correcto si representa un NULL, de