"array subscript is above array bounds"

"array subscript is above array bounds"

por Lucas Hiroshi Hayashida -
Número de respostas: 2

Ao compilar o meu .c eu recebo esse Warning, o que ele poderia ser?
Alias, utilizando o -O2 eu tambem recebo os seguintes:

ignoring result value of 'fgets', declared with attributes warn_unused_result [-Wunused-result]

 

Do que se tratam esses warning?
Obrigado 

Em resposta à Lucas Hiroshi Hayashida

Re: "array subscript is above array bounds"

por José Coelho de Pina -

"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.