Valor de retorno de fgets ()
Eu recentemente comecei a trabalhar comI/O
noC
. Aqui está a minha pergunta -
Eu tenho um arquivo, do qual li minha entrada. Então eu usofgets()
para obter strings em um buffer que eu utilizo de alguma maneira. Agora, o que acontece se a entrada for muito curta para o buffer, ou seja, se a primeira leitura forfgets()
alcançaEOF
. Devemosfgets()
RetornaNULL
(como eu li emfgets()
documentação)? Parece que não e eu recebo minha opinião corretamente. Além do meufeof(input)
não diz que alcançamosEOF
.
Aqui está o meu trecho de código.
char buf[BUFSIZ];
FILE *input,
*output;
input = fopen(argv[--argc], "r");
output = fopen(argv[--argc], "w");
/**
* If either of the input or output were unable to be opened
* we exit
*/
if (input == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 1]);
exit(EXIT_FAILURE);
}
if (output == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 0]);
exit(EXIT_FAILURE);
}
if (fgets(buf, sizeof(buf), input) != NULL) {
....
}
/**
* After the fgets() condition exits it is because, either -
* 1) The EOF was reached.
* 2) There is a read error.
*/
if (feof(input)) {
fprintf(stdout, "Reached EOF.\n");
}
else if (ferror(input)) {
fprintf(stdout, "Error while reading the file.\n");
}