elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Archivos (c)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Archivos (c)  (Leído 2,947 veces)
UsuarioZ

Desconectado Desconectado

Mensajes: 64


Ver Perfil
Archivos (c)
« 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.

Código:
#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:
Código:
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.


« Última modificación: 17 Marzo 2021, 04:34 am por UsuarioZ » En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Archivos (c)
« Respuesta #1 en: 17 Marzo 2021, 05:34 am »

No veo donde se inicializa el archivo (FILE *)
Hace falta igualar el apuntador, algo asi como:

Código
  1. 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!


« Última modificación: 17 Marzo 2021, 05:44 am por AlbertoBSD » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.966


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Archivos (c)
« Respuesta #2 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).

Código
  1. int main ()
  2. {
  3.    FILE* archivo = 0;
  4.    abrArch(archivo);
  5. ...
  6.   /*archivo seguira siendo 0 en este punto*/
  7. void abrArch(FILE* f)
  8. {
  9.    f = fopen("f.txt", "w");
  10.  
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
UsuarioZ

Desconectado Desconectado

Mensajes: 64


Ver Perfil
Re: Archivos (c)
« Respuesta #3 en: 17 Marzo 2021, 09:43 am »

Gracias, aplique las dos cosas y funciono.

Código:
El archivo se abrio correctamente!
El archivo se cerro exitosamente!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines