Olá!
Como vi várias perguntas a respeito e ainda nenhuma resposta, segue a dedução que fiz.
O código abaixo, na primeira passada do loop, para i = 0:
for (int i = 0; i < 5; i++){ printf("%s\n", mapa[i]); }
imprime: |--------||...|..-.||..-|.@..||......-.||--------|
Ou seja, tudo que está a partir da posição de memória apontada por mapa[0] .
Para i = 1, imprime: |...|..-.||..-|.@..||......-.||--------| Ou seja, tudo que está a partir da posição de memória apontada por mapa[1] . E assim sucessivamente. No final do loop, temos:
|--------||...|..-.||..-|.@..||......-.||--------| [quebra] |...|..-.||..-|.@..||......-.||--------| [quebra] |..-|.@..||......-.||--------| [quebra] |......-.||--------| [quebra] |--------| [quebra]
Percebam que na leitura do arquivo não foi encontrada nenhuma quebra de linha, e assim na primeira iteração do loop a leitura foi completa, como se tudo estivesse na primeira linha. Já na segunda iteração, como o ponteiro do leitor de arquivo se posiciona no início da segunda linha, ele lê as quatro linhas seguintes como se as 4 últimas linhas estivessem em uma única linha.
Por que isso acontece? Quando criamos o arquivo mapa.txt, copiamos e colamos os caracteres a partir da página da Alura, e lá não existe o caractere de quebra de linha. Assim, o fscanf por não encontrar a quebra de linha lê tudo, até o fim do arquivo, e armazena tudo a partir da posição de memória apontada por mapa[0]. Na segunda iteração, a leitura é a partir da segunda linha, e o armazenamento é apartir da posição apontada por mapa[1]. O intervalo entre mapa[0] e mapa[1] é mantido na memória, mas o intervalo entre mapa[1] e mapa[4] é sobrescrito na memória, e assim sucessivamente.
Se manualmente dermos um enter linha a linha no arquivo mapa.txt, e depois salvarmos o arquivo, inserimos a quebra de linha, lida pelo \n. Após fazermos isso, a impressão aparece conforme no vídeo, pois cada posição de memória apontada por mapa[i] encontra o \n e armazena naquele pedaço da memória apenas a linha correspondente.
|--------| [quebra] |...|..-.| [quebra] |..-|.@..| [quebra] |......-.| [quebra] |--------| [quebra]