[ 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 (+30)

"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".






Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...