Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Oblivi0n en 28 Febrero 2011, 23:30 PM

Título: [C][?] Problema apertura de archivos
Publicado por: Oblivi0n en 28 Febrero 2011, 23:30 PM
Buenas gente.

Estoy haciendo un "editor hexadecimal" bastante basico, el caso es que quiero que habra cualquier archivo del disco duro, y para ello tengo este fragmento de codigo
void Initialize_File()
{
File.file = fopen(File.path,"rb");

if(File.file != NULL)
{
printf("se pudo abrir el archivo\n");
}
else if(File.file == NULL)
{
printf("No se pudo\n");
}
system("PAUSE");
}


(los system("PAUSE") son para ir haciendo pruebas)

File.path es la direccion del archivo, (que ingrese previamente), este metodo ya lo utilice mas veces y me funcionaba, sin embargo hoy no me abre los archivos, dejo tambien el codigo que obtiene la ruta.
void GetPath()
{
char path[64];
File.path_len = 0;
int i = 0;
printf("Introduce la ruta\n");
gets(path);
while(path[i] != '\0')
{
File.path_len++;
i++;
}
File.path = (char*) malloc(File.path_len * sizeof(char));
File.path = path;
printf("La cadena es %s y mide %d caracteres",File.path,File.path_len);
system("PAUSE");
}


Tambien pongo la estructura desde en la que se guardarian todos los datos
struct disas_file{
char *path;
int path_len;
int size;
FILE *file;
char *data;
};



Gracias de antemano!
Título: Re: [C][?] Problema apertura de archivos
Publicado por: ace332 en 1 Marzo 2011, 00:04 AM
Creo que esta línea

File.path = (char*) malloc (File.path_len * sizeof(char));


debería estar escrita asi

File.path = (char*) malloc ((File.path_len +1) * sizeof(char));


Y también faltaría copiar la cadena al espacio de memoria reservado..

Osea que esto

File.path = path;


esta mal. Deberias utlizar strcpy ..

Saludos
Título: Re: [C][?] Problema apertura de archivos
Publicado por: Oblivi0n en 1 Marzo 2011, 00:23 AM
Muchas gracias, errores tontos los mios  :xD

Funcionó!
Título: Re: [C][?] Problema apertura de archivos
Publicado por: Garfield07 en 1 Marzo 2011, 12:39 PM
Aún no debería...

Deberías usar strncpy
Deberías usar fgets  antes que gets. Es peligroso. Pásame todo el código fuente y me saco de la manga uno o dos BoF...
Y a ver cómo defines File.file, se define como [FILE *file]. No sé cómo lo has puesto, a lo mejor así te sigue dando fallos...
Y en lo del path_len hay una función llamada strlen que hace lo mismo pero mejor que como tú lo estás haciendo...
Más que se resta uno, no se suma...

Un saludo!
Sagrini