Created
January 14, 2024 19:24
-
-
Save danirod/ff1adc56a1f04ac3986775cfa6a04044 to your computer and use it in GitHub Desktop.
Cómo funciona fgets para gente con poca memoria
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Cómo funciona fgets para gente con poca memoria | |
=============================================== | |
fgets(buffer, len, source) | |
Lee hasta (len-1) caracteres desde [source] y los deja sobre | |
el buffer apuntado por [buffer]. Normalmente lo invocarás | |
para leer de stdin como | |
fgets(buffer, BUFSIZ, stdin) | |
* Retorno: | |
- Si ha leído algo, devuelve la cadena de caracteres leída. | |
- Si no ha leído nada o si el buffer source está en EOF, | |
devuelve NULL. | |
* Condiciones de lectura | |
- fgets incluye el \n al final de la línea. | |
- Por lo tanto, leer una línea vacía no es no leer nada | |
porque vas a leer una cadena que tiene un "\n". | |
- fgets se asegura de poner un 0 al final de la cadena | |
leída. | |
- Por lo tanto, vas a leer hasta (len-1), porque (len) | |
incluye el \0 final. | |
- Si pulsas Enter, tienes la certeza de que fgets devuelve | |
(es decir, fgets no junta dos líneas separadas de stdin) | |
- Si metes por teclado una línea de más de [len-1] caracteres, | |
fgets va a leer lo que quepa, pero recuerda llamarla más | |
veces para leer la segunda parte. (Sabes que has terminado | |
de leer la línea porque termina por \n\0) | |
* Algunas observaciones hechas con un programa de prueba | |
- echo '' | ./main | |
Como el echo contiene un \n, un primer fgets devuelve "\n" | |
Un segundo fgets devuelve NULL porque no hay más lineas | |
en stdin. | |
- echo -n '' | ./main | |
Como el echo no contiene un \n, es una cadena vacía, por | |
lo tanto fgets() devuelve NULL al instante la primera | |
vez y sucesivas llamadas. | |
- echo -e "hola\nadios" | ./main | |
El echo contiene dos líneas (adios también incluye un \n | |
al final porque no he puesto el -n). Por lo tanto, la | |
primera llamada a fgets devuelve "hola\n" y la segunda | |
llamada a fgets devuelve "adios\n". |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment