"array subscript is above array bounds"
Diz que você está usando o índice (subscript) de um vetor ou matriz (array) fora dos limites definidos.
Por exemplo, a compilação do trecho de código a seguir apresenta esse aviso.
int v[3]; int i; for (i = 0; i <= 3; i++) v[i] = 1;
Note que isto não é um mero "aviso" pois, de fato, no trecho de código acima há um erro.
Acessamos a "variável" v[3] e o vetor é formado por v[0], v[1] e v[2],
já que na declaração de um vetor ou matriz (array) o número inteiro que vai entre colchetes
é o número de elementos do vetor ou matriz e não o índice da última posição.
ignoring result value of 'fgets'
Este aviso está dizendo que você não está usando o valor retornado pela chamada da função fgets.
Para tirar esse aviso você pode, pelo menos por enquanto, compilar com
a opção -Wno-unused-result . A especificação da função está logo abaixo, quem usa
linux pode obter a especificação da função no prompt fazendo
meu_prompt> man fgets
Façam o mesmo com fscanf e fprintf e vejam o resultado.
Especificação da função fgets
char *fgets(char *line, int maxline, FILE *fp)
reads the next input line (including the newline) from file fp into the character array
line; at most maxline-1 characters will be read. The resulting line is terminated with ’\0’.
Normally fgets returns line; on end of file or error it returns NULL.