[ Foro de C ]

CC095 Ej C085

07-Nov-2016 15:36
Invitado (Carlos Villiere)
1 Respuestas

Estimado Sr. Cabanes:

Lo consulto en referencia del Ejemplo C084 de su texto Fundamentos de programación en C Revisión 0.95 (cc095.pdf) y que copio a continuación


/*---------------------------*/
/* Ejemplo en C nº 84: */
/* c084.c */
/* */
/* Copiador de ficheros en */
/* una pasada */
/* */
/* Curso de C, */
/* Nacho Cabanes */
/*---------------------------*/

#include <stdio.h>

FILE *fichOrg, *fichDest; /* Los dos ficheros */
char *buffer; /* El buffer para guardar lo que leo */
char nombreOrg[80], /* Los nombres de los ficheros */
	 nombreDest[80];
long longitud; /* Tamaño del fichero */
long cantidad; /* El número de bytes leídos */

int main()
{
	/* Accedo al fichero de origen */
	printf("Introduzca el nombre del fichero Origen: ");
	scanf("%s",nombreOrg);
	if ((fichOrg = fopen(nombreOrg, "rb")) == NULL)
	{
		printf("No existe el fichero origen!\n");
		void exit(int n);
	}
	
	/* Y ahora al de destino */
	printf("Introduzca el nombre del fichero Destino: ");
	scanf("%s",nombreDest);
	if ((fichDest = fopen(nombreDest, "wb")) == NULL)
	{
		printf("No se ha podido crear el fichero destino!\n");
		void exit(int n);
	}
	
	/* Miro la longitud del fichero de origen */
	fseek(fichOrg, 0, SEEK_END);
	longitud = ftell(fichOrg);
	fseek(fichOrg, 0, SEEK_SET);
	
	/* Reservo espacio para leer todo */
	buffer = (char *) malloc (longitud);
	if (buffer == NULL)
	{
		printf("No se ha podido reservar tanto espacio!\n");
		void exit(int n);
	}
	
	/* Leo todos los datos a la vez */
	cantidad = fread( buffer, 1, longitud, fichOrg);
	
	/* Escribo tantos como haya leído */
	fwrite(buffer, 1, cantidad, fichDest);

	if (cantidad != longitud)
	   printf("Cuidado: no se han leido (ni copiado) todos los datos\n");
	
	/* Cierro los ficheros */
	fclose(fichOrg);
	fclose(fichDest);
	return 0;
}


Lo cargue y compile con Dev-Cpp Ver. 5.11
Mis dudas son:
1. Por que tuve que cambiar la sentencia exit(1); de su texto a void exit(int n); para que el compilador no de ninguna advertencia de error
2. En buffer = (char *) malloc (longitud); al compiler aparece: warning: incompatible implicit declaration of built-in function 'malloc'
A fin que usted pueda aclarar mis dudas le adjunto un log de la compilación
Desde ya agradezco su ayuda.
Atte. Carlos Villiere

Compiling single file...
--------
- Filename: C:\Programación Orientada a Objetos\Programas en CC095\C084.c
- Compiler Name: TDM-GCC 4.9.2 32-bit Debug

Processing C source file...
--------
- C Compiler: C:\Program Files\Dev-Cpp\MinGW64\bin\gcc.exe
- Command: gcc.exe "C:\Programación Orientada a Objetos\Programas en CC095\C084.c" -o "C:\Programación Orientada a Objetos\Programas en CC095\C084.exe" -m32 -g3 -g3 -I"C:\Program Files\Dev-Cpp\MinGW64\include" -I"C:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"C:\Program Files\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include" -L"C:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib32" -L"C:\Program Files\Dev-Cpp\MinGW64\lib" -L"C:\Program Files\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc -m32 -g3
C:\Programación Orientada a Objetos\Programas en CC095\C084.c: In function 'main': C:\Programación Orientada a Objetos\Programas en CC095\C084.c:47:20: warning: incompatible implicit declaration of built-in function 'malloc'
 buffer = (char *) malloc (longitud);
                   ^
Compilation results...
--------
- Errors: 0
- Warnings: 1
- Output Filename: C:\Programación Orientada a Objetos\Programas en CC095\C084.exe
- Output Size: 124,7138671875 KiB
- Compilation Time: 0,75s


27-Nov-2016 11:21
Nacho Cabanes (+83)

"exit" está declarada en "stdlib", por lo que en muchos compiladores deberás añadir


#include <stdlib.h> 


Esa línea debería solucionar también el problema con "malloc".






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)