Hola lista!!
Me sucede una cosa curiosa con un programa que he tenido que hacer para
la universidad. El programa en cuestión está escrito en ANSI C y lo
compilo con el gcc que viene con Debian. El problema que me surge es con
las funciones de C fflush y fprintf, y es que la función fflush no
funciona bien por alguna razón ya que no me limpia el buffer de stdin
como debería.
La función es esta:
int leerCadena (Tbyte cadena[MAX_CADENA+1])
/*funcion que obtiene un array del teclado y cuenta su longitud*/
{
int tam,longitud;
fprintf(stdout,"\nIntroduzca su frase: ");
fgets(cadena, MAX_CADENA+1, stdin);
fflush(stdin);
tam = strlen(cadena);
if(cadena[tam-1] == 10)
{
cadena[tam-1] = '\0';
longitud = tam-1;
}
else
longitud=tam;
return longitud;
}
El caso es que la uso dentro de un bucle en otra función y cuando
escribo con el teclado más caracteres de los que puede almacenar
"cadena" pues en vez de eliminarlos con fflush es como si no lo hiciera
por que a la siguiente pasada del bucle utiliza esos caracteres.
Además en esta otra función:
extern int procesarPDU (TBloqueDeDatos pdu)
{
int resultado;
int nPDU;/*se usa para procesar el valor de los tres bits de numero
de fragmento*/
Tbyte bitFinal;/*se usa para procesar el bit de final de array*/
Tbyte aImprimir[DATOS];/*se usa para procesar los datos de la PDU*/
nPDU = procesarnPDU(pdu.buffer[1]);
bitFinal = procesarBitFinal(pdu.buffer[1]);
procesarDatos(aImprimir, pdu.buffer);
fprintf(stdout,"\nBlq.%d Ver.%d %d bytes <%c>:", nPDU, version,
pdu.longitud, bitFinal);
fprintf(stdout," %s\n", aImprimir);
if (bitFinal == 'F')
return 0;
else
return 1;
}
cuando imprime por pantalla la variable "aImprimir" me imprime más
caracteres de los que dicha variable puede almacenar, por ejemplo
teniendo en cuenta que la constante DATOS tiene valor 10; en aImprimir
solo se almacenan 10 caracteres, pero en algunas ocasiones imprime más
de diez.
Recurro a ustedes por que el mismo código compilado en los windows de mi
facultad se ejecuta perfectamente y no hace cosas "raras". Imagino que
debe de ser algún fallo que tiene mi compilador o mi Debian (que por
cierto es Etch) en la manera de manejar stdin y stdout.
Les agradecería si pudieran orientarme sobre la razón de estas anomalías.
Un saludo.
Jonay.
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]