Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con "char *" como funcion.

Estas en el tema de Problema con "char *" como funcion. en el foro de C/C++ en Foros del Web. Hola, miren les queria comentar el siguiente problema. Estoy probando una funcion para poder importar el texto de un archivo usando FILE. El codigo con ...
  #1 (permalink)  
Antiguo 30/06/2011, 22:40
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 2 meses
Puntos: 8
Problema con "char *" como funcion.

Hola, miren les queria comentar el siguiente problema.

Estoy probando una funcion para poder importar el texto de un archivo usando FILE.
El codigo con el que probe primero fue.


Código:
#include <stdio.h>
#include <string.h>

char *Abrir_fc(char* archivo)
{

	char carpeta[512];
        sprintf(carpeta, "Objetos/%s.sct", archivo); 
	FILE  *f;
	printf("Archivo: %s\n", carpeta);
	f = fopen(carpeta,"rb");
	if (f == NULL)
	{
		return "";
	} else {
		char *Importado = " ";
		char cad[512];
    		int suma = 0, t;
		printf("aca no hay error\n");
    		for (suma=0; suma < 32000; suma++){
			sprintf(cad, "");
        		fgets(cad, 8, f);
        		t = strlen(cad);
        		suma+= t;
        		sprintf(Importado, "%s%s", Importado, cad); 
    		}
		fclose(f);
		return Importado;
	}

}
Bueno con ese codigo no tuve problemas al compilar, solo que cuando ejecutaba el programa y probaba la funcion me decia: "línea 2: 6591 Fallo de segmentación"

"Arregle" el problema a medias y eso es lo que me molesto, ya que el codigo quedo asi:

Código:
#include <stdio.h>
#include <string.h>

char *importar_dato(char *, char *);
char *Abrir_fc(char*);


char *Abrir_fc(char* archivo)
{

	char carpeta[512];
        sprintf(carpeta, "Objetos/%s.sct", archivo); 
	FILE  *f;
	printf("Archivo: %s\n", carpeta);
	f = fopen(carpeta,"rb");
	if (f == NULL)
	{
		return "";
	} else {
		char Importado[32000];
		char cad[512];
    		int suma = 0, t;
		printf("aca no hay error\n");
    		for (suma=0; suma < 32000; suma++){
			sprintf(cad, "");
        		fgets(cad, 8, f);
        		t = strlen(cad);
        		suma+= t;
        		sprintf(Importado, "%s%s", Importado, cad); 
    		}
		fclose(f);
		return Importado;
	}

}
Como ven en vez de usar "char *" utilize un "char [32000]". pero la verdad no me gusto para nada, quisiera saber que estoy haciendo mal.

Antes que nada Gracias por leer esto y disculpen las molestias.
  #2 (permalink)  
Antiguo 30/06/2011, 22:41
Avatar de Doommarine_Maxi  
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 13 años, 2 meses
Puntos: 8
Dato extra...

Por si necesitan mas informacion este es el "main.c" o archivo raiz del programa, y aqui muestro como invoco a la funcion. (tal vez eso este mal).


Código:
#include <stdio.h>
#include "Funciones/archivos.c"


int main(int dato1, char *dato2[])
{
	char fichero[128];
	printf("Introduce nombre de archivo: ");
	scanf("%s",fichero);


	printf("Datos importados: %s \n", Abrir_fc(fichero));
	return 0;
}
  #3 (permalink)  
Antiguo 01/07/2011, 05:03
Avatar de afrika026  
Fecha de Ingreso: junio-2011
Mensajes: 85
Antigüedad: 12 años, 10 meses
Puntos: 19
Respuesta: Problema con "char *" como funcion.

te da error en segmentación porque no estas inicializando el puntero *Importado.

tenes que poner: char *Importado = new char [32000];

Etiquetas: char*, fallo, funcion, segmentación, sttring, void
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:23.