La risposta è questa:
Quote Originariamente inviata da KillerWorm Visualizza il messaggio
Nel tuo caso, considera che i due indici della matrice fanno riferimento alle posizioni dei singoli spazi contenuti all'interno della cornice. La struttura in output occupa uno spazio complessivo 10x10, compresi i caratteri che costituiscono la cornice stessa, per cui il contenuto (rappresentato dall'array) è una matrice 8x8; considerando quindi che campo[0][0] costituisce il primo carattere "spazio", all'interno della cornice, nell'angolo in alto a sinistra.

I caratteri che costituiscono la cornice non stanno quindi dentro l'array campo (o field o quel che è), in cui sono invece definiti solo i caratteri contenuti all'interno del riquadro (come già detto), ma il bordo, e relativi ritorno a capo, sono man mano aggiunti alla stringa output attraverso i vari cicli, andando sempre a costruirla da sinistra verso destra e dall'alto verso il basso.
Prova a rendere il contenuto leggibile, es:
codice:
int c = 47;
for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++)
        campo[i][j] = (char) ++c;
}
e ad invertire gli indici (non dappertutto, ovviamente)