elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
11 Octubre 2008, 18:57  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++
| | |-+  Error al abrir el archivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Error al abrir el archivo  (Leído 474 veces)
juampilotus

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Error al abrir el archivo
« en: 18 Abril 2008, 04:43 »

hola!

Mi problema es este, al ejecutar el programa me tira un error diciendo que el programa a sufrido un problema y debe cerrarse, busque en donde podria haber sido el error y llegue a la parte en que abre el archivo, pero no se como solucionarlo. Me mate buscando en Google pero no encontre a nadie que tenga un error parecido.

el programa compila perfecto, el problema es solo cuando lo ejecuto.

Les dejo el codigo asi lo ven:



#include <stdio.h>

typedef struct{
    FILE* archivo;
}reg;

int main(int argc,char* argv[]){
   char* cadena;   
   char* dir;
   reg* registro;
   char abrir[3]= "r";
   
   printf("Por favor ingrese una linea: ");
   dir=gets(cadena);
   
   registro->archivo=fopen(dir,abrir);
   
   if (registro->archivo==NULL) printf("no se pudo abrir el archivo");
   else printf("se pudo abrir el archivo");
   
   fclose(registro->archivo);
   getchar();
return 0;
}


espero que puedan ayudarme gracias!
En línea
Flakito81

Desconectado Desconectado

Mensajes: 350



Ver Perfil
Re: Error al abrir el archivo
« Respuesta #1 en: 18 Abril 2008, 11:52 »

Hola!
Los problemas son:

1- cadena es un puntero, ¿pero que tamaño tiene? o le das un valor como lo he corregido o usas un malloc / new (para c++). En definitiva estas intentando meter una frase/palabra en un espacio dnd no cabe sino 1 o 2 caracteres.

2- Unicamente has de  cerrar el fichero si ha sido abierto ¿por qué? Pues xq cnd intentas abrir un fichero y no puede retorna NULL e intentar cerrar un NULL va  dar un error.

Código
#include <stdio.h>
 
typedef struct{
   FILE* archivo;
}reg;
 
int main(int argc,char* argv[]){
  char cadena[15];  
  char *dir;
  reg* registro;
  char abrir[3]= "r";
 
  printf("Por favor ingrese una linea: ");
  dir = gets(cadena);
 
  registro->archivo=fopen(dir, abrir);
 
  if (registro->archivo==NULL)
      printf("no se pudo abrir el archivo");
  else
  {
      printf("se pudo abrir el archivo");
      fclose(registro->archivo); //solo si se pudo abrir es cuando tenemos q cerrarlo
  }
  getchar();
  return 0;
}
 

Saludos!

PD: Podrias usar la variable cadena en vez de dir
En línea
juampilotus

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Error al abrir el archivo
« Respuesta #2 en: 18 Abril 2008, 17:34 »

Gracias por tu ayuda, eran errores que cometia muy seguido, pero me sigue tirando el mismo error!

La verdad que ya no se que pensar, no tengo ni idea de que puede ser!

Les agradezco todo tipo de ayuda

Saludos
En línea
Flakito81

Desconectado Desconectado

Mensajes: 350



Ver Perfil
Re: Error al abrir el archivo
« Respuesta #3 en: 19 Abril 2008, 10:06 »

Pega los errores para poder ayudarte; aunque el código que te he puesto no tiene ningun error, de hecho está compilado y probado. Si quieres haz un debugger para que sepas q almacena cada variable. Como el programa es pekeño usa printf para ver el contenido de las variables.

Un saludo
En línea
ҒrεακΠιи∂

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Error al abrir el archivo
« Respuesta #4 en: 19 Abril 2008, 15:40 »

Buenas

Código
typedef struct{
   FILE* archivo;
}reg;
Esto no lo hagas. Si queres ponerle otro nombre al tipo de dato de los archivos hace
Código
typedef FILE*  reg;

Código
dir=gets(cadena);
Aca tenes 2 cositas:
       1- No controlas que gets devuelva NULL por algun tipo de error o EOF, por lo que cuando usas fopen bien podes estar tratando de abrir NULL
       2- Para que tener dos variables que (en caso de que no haya error) apuntan a la misma cadena?


Código
registro->archivo=fopen(dir,abrir);
En tu codigo, registro es un puntero, por lo que antes de hacer eso tenes que reservarle memoria


Fijate si reservando memoria para reg se soluciona tu problema

Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C
juampilotus

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Error al abrir el archivo
« Respuesta #5 en: 20 Abril 2008, 01:16 »

Bueno muchachos esto es lo que tengo:

Código:
#include <stdio.h>
#include<stdlib.h>
 
typedef struct ej{
FILE* archivo;
}estr;

int main(int argc,char* argv[]){
   char cadena[15];     
   estr* estruc;
   char abrir[3]= "r";
   int cerrar;
   
 
   estruc=malloc(sizeof(struct ej));
   printf("Por favor ingrese una linea: ");
   fflush(stdin);
   scanf("%s",cadena);
 
   estruc->archivo=fopen(cadena, abrir);
 
   if (estruc->archivo==NULL)
       printf("no se pudo abrir el archivo");
   else
   {
       printf("se pudo abrir el archivo\n");
       cerrar=fclose(estruc->archivo);
       if (cerrar!= 0) printf("Error al cerrar el archivo");
       else printf("El archivo se cerró exitosamente");
   }
   
   free(estruc);
   fflush(stdin);
   printf("\nfinal\n");
   getchar();
   
   return 0;
}

Cuando le tiro la ubicacion del archivo incorrecta anda perfecto, pero cuando le tiro la ubicacion correcta, segun el seguimiento que le hize el error lo tira despues del getchar.

El error que me tira es de este tipo:



espero que puedan ayudarme gracias!
En línea
ҒrεακΠιи∂

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Error al abrir el archivo
« Respuesta #6 en: 20 Abril 2008, 03:43 »

Buenas

Código
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(void)
{
   char        str[20];
   FILE        *f;
 
   fgets(str, 20, stdin);
 
   str[strlen(str) - 1] = '\0';
 
   if((f = fopen(str, "r")) == NULL){
       printf("No se pudo abrir el archivo\n");
   }else{
       printf("Se abrio el archivo\n");
       fclose(f);
   }
 
   getchar();
   return 0;
}
 

Fijate si eso anda

Saludos, FreakMind
En línea

Connoisseurs of C semantics find C++ inferior to ++C
Flakito81

Desconectado Desconectado

Mensajes: 350



Ver Perfil
Re: Error al abrir el archivo
« Respuesta #7 en: 21 Abril 2008, 01:47 »

A mi esto no me da ningun error. He probado el codigo.
Código
#include <stdio.h>
#include<stdlib.h>
 
typedef struct estr{
FILE* archivo;
};
 
int main(int argc,char* argv[]){
  char cadena[15];    
  estr *estruc;
  char abrir[3]= "r";
  int cerrar;
 
 
  estruc = (estr *) malloc(sizeof(estr));
  printf("Por favor ingrese una linea: ");
  fflush(stdin);
  scanf("%[^\n]",cadena);
 
  estruc->archivo=fopen(cadena, abrir);
 
  if (estruc->archivo==NULL)
      printf("no se pudo abrir el archivo");
  else
  {
      printf("se pudo abrir el archivo\n");
      cerrar=fclose(estruc->archivo);
      if (cerrar != 0) printf("\nError al cerrar el archivo");
      else printf("\nEl archivo se cerró exitosamente");
  }
 
  free(estruc);
  fflush(stdin);
  printf("\nfinal\n");
  getchar();
}
 

Saludos!
En línea
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats