Representación octal dentro de una cadena en C

En el programa dado:

int main() {
  char *p = "\0777";
  printf("%d %d %d\n",p[0],p[1],p[2]);
  printf("--%c-- --%c-- --%c--\n",p[0],p[1],p[2]);
  return 0;  
}

Está mostrando la salida como:

63 55 0
-? --7-- ----

Puedo entender que está convirtiendo los dos primeros caracteres después de\ 0 (\ 077) desdeoctal a decimal pero, ¿puede alguien explicarme por qué 2 caracteres, por qué no 1 o 3 o cualquier otro?

Por favor explique la lógica detrás de esto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta