Guias_y_practica/Archivos/main.c
/**
 * @brief Lee una linea de longitud indefinida
 * @pre El archivo viene abierto en modo lectura
 * @param  *f: Archivo abierto en modo texto
 * @retval Cadena de caracteres leida
 */
@brief Lee una linea de longitud indefinida
@pre El archivo viene abierto en modo lectura
@param  *f: Archivo abierto en modo texto
@retval Cadena de caracteres leida
@brief Lee una linea de longitud indefinida @pre El archivo viene abierto en modo lectura @param * f : Archivo abierto en modo texto @retval Cadena de caracteres leida
char *readline_n_fgets(FILE *f) {
	char buffer[10 + CENTINELA];
	char *l_ptr = NULL;
	size_t l_prev = 0;
	while (fgets(buffer, sizeof(buffer), f) != NULL) {    
		char *buff_aux = realloc(l_ptr, sizeof(char) * (strlen(buffer) + l_prev + CENTINELA));
		if (buff_aux == NULL) {
			if (l_ptr != NULL)
				free(l_ptr);
			return NULL;
		}
		l_ptr = buff_aux;
		strcpy(l_ptr + l_prev, buffer);    
		l_prev += strlen(buffer);          
		if (buffer[strlen(buffer) - CENTINELA] == '\n')
			return l_ptr;
	}
	return l_ptr;
}
char * readline_n_fgets ( FILE * f ) { char buffer [ 10 + CENTINELA ] ; char * l_ptr = NULL ; size_t l_prev = 0 ; while ( fgets ( buffer , sizeof ( buffer ) , f ) != NULL ) { char * buff_aux = realloc ( l_ptr , sizeof ( char ) * ( strlen ( buffer ) + l_prev + CENTINELA ) ) ; if ( buff_aux == NULL ) { if ( l_ptr != NULL ) free ( l_ptr ) ; return NULL ; } l_ptr = buff_aux ; strcpy ( l_ptr + l_prev , buffer ) ; l_prev += strlen ( buffer ) ; if ( buffer [ strlen ( buffer ) - CENTINELA ] == ' \n ' ) return l_ptr ; } return l_ptr ; }
@brief Lee una linea de longitud indefinida
 @pre El archivo viene abierto en modo lectura
 @param  *f: Archivo abierto en modo texto
 @retval Cadena de caracteres leida
@brief Lee una linea de longitud indefinida @pre El archivo viene abierto en modo lectura @param * f : Archivo abierto en modo texto @retval Cadena de caracteres leida
// Invariante de ciclo. Registro de la ultima longitud del array // Siempre el fgets lee n-1 caracter y reserva el ultimo para el centinela. Minimamente el buffer tiene que tener 2 elementos. // Mido la longitud real del string en el buffer antes de ir guardando en heap y sumo 1 para el centinela // Longitud de la nueva cadena leida con el buffer + Longitud de la cadena actual guardada en el heap + centinela // strcpy copia la cadena src en dest incluso el Centinela del src // Sumo a la longitud actual del arreglo dinamico la longitud actual del array