Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: UsuarioZ en 17 Marzo 2021, 04:00 AM

Título: Archivos (c)
Publicado por: UsuarioZ en 17 Marzo 2021, 04:00 AM
Hola, estaba probando abrir y cerrar un archivo, con fopen y fclose, pero no se muestran los printf al cerrar, ¿Qué estoy haciendo mal?

Gracias de antemano.


#include <stdio.h>
#include <string.h>
#include <errno.h>

void abrArch(FILE* f);
void cerrArch(FILE* f);

int main ()
{
   FILE* archivo;

   abrArch(archivo);
   cerrArch(archivo);

   return 0;
}

void abrArch(FILE* f)
{
   fopen("f.txt", "w");

   if(f != NULL)
       printf("El archivo se abrio correctamente!\n");
   else
       printf("Error al intentar abrir el archivo.\n");
}

void cerrArch(FILE* f)
{
   if(fclose(f) == 0)
       printf("El archivo se cerro exitosamente!\n");
   else
       printf("El archivo no pudo ser cerrado\n");
}



Salida:

El archivo se abrio correctamente!



PD: Disculpen por la categoría, recién la veo y no se como cambiarla.
Edit: Ya la cambiaron, gracias.
Título: Re: Archivos (c)
Publicado por: AlbertoBSD en 17 Marzo 2021, 05:34 AM
No veo donde se inicializa el archivo (FILE *)
Hace falta igualar el apuntador, algo asi como:

f = fopen("f.txt", "w");


Si eso si soluciona tu problema, el problema era que estabas mandando a cerrar un FILE* sin inicializar y el programa se cerraba sin siquiera termianr de evaluar el if

Saludos!
Título: Re: Archivos (c)
Publicado por: Eternal Idol en 17 Marzo 2021, 08:53 AM
AlbertoBSD esta en lo correcto; agrego un par de detalles, si queres que abrArch cambie el valor de, en este caso, la variable archivo tenes que usar doble puntero (o referencia en C++) y la comparacion que estas haciendo en cerrArch no funcionara por la misma razon (aunque le asignes el resultado del fopen a f en la funcion abrArch eso sera unicamente una variable de ambito local y archivo continuara teniendo el valor que tenia antes de llamar a abrArch).

int main ()
{
    FILE* archivo = 0;
    abrArch(archivo);
...
   /*archivo seguira siendo 0 en este punto*/
void abrArch(FILE* f)
{
    f = fopen("f.txt", "w");
Título: Re: Archivos (c)
Publicado por: UsuarioZ en 17 Marzo 2021, 09:43 AM
Gracias, aplique las dos cosas y funciono.


El archivo se abrio correctamente!
El archivo se cerro exitosamente!