Básicamente, quiero copiar todo lo que escribo en stdin (incluido el carácter de nueva línea) en una cadena con fines hash. Me las arreglé para lograr eso e hice un pequeño código para representar mi problema.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFERSIZE 10000
int main()
{
char *myStr = calloc(1,1);
char buffer[BUFFERSIZE];
while( fgets(buffer, BUFFERSIZE , stdin) != NULL ){
myStr = realloc(myStr, strlen(myStr)+1+strlen(buffer) );
strcat( myStr, buffer );
}
printf("\n%s\n",myStr);
}
todo funciona cuando ingreso un texto, luego presiono ENTER y luego llamo a EOF.
Pero cuando inicio el programa, ingreso “a”, luego trato de llamar a EOF (usando Control Z + ⏎ (Indicador de cmd de Windows), Control D (Linux)) Tengo que hacerlo tres veces para que el programa realmente rompa el bucle. Esperaba un máximo de 2 veces.
¿Alguien puede explicar cómo funciona el uso de EOF, stdin y fgets? ¿O debería usar algo más (por ejemplo, getline)? Lo siento si no tengo claro mi problema, solo pregunta lo que necesites.
Gracias.
Aquí hay una explicación de cómo funciona Ctrl+D.
– usuario3386109
20 de abril de 2015 a las 23:31
¡No puede usar Ctrl+Z porque el terminal usa Ctrl+Z para suspender el proceso!
– Sir Jo Negro
20 de abril de 2015 a las 23:32
@SergioFormiggini Ctrl+Z es el carácter EOF en Windows.
– usuario3386109
20/04/2015 a las 23:35
¡OK! me he olvidado de windows :p
– Sir Jo Negro
20 de abril de 2015 a las 23:46