Estopero
16/05/2007, 02:51
Hola a todos!
Os escribo esto aqui porque estoy desesperaito xD estoy implementando ahora en el BugaFactor el poder leer las propiedades de cada nivel desde un fichero. Las lineas del fichero podriam ser estas:
[ENEMIE_0]
e_robotic_1.png
0
100
Para leer la linea "e_robotic_1.png" haria:
LeerPropiedad( ENEMIE_0 , 1);
La funcion la he escrito asi:
#include "Ficheros.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
////////////////////////////////////////////////
//FUNCION: funcion_LeerPropiedad
/////////////////////////////////////////////////
char* funcion_LeerPropiedad( char* sPropiedad, int iLinea) {
char cadena[200];
char sPropiedadTemp[200];
char* sResultado;
int iLineaTemp=0;
//Hacemos esto para ir comparando las lineas correctamente hasta encontrar la propiedad buscada
//De tener una cadena "texto" pasamos a tener una cadena "[texto]\n" que es como estan escritas en el fichero
sPropiedadTemp[0]='[';
sPropiedadTemp[1]='\0';
strcat(sPropiedadTemp,sPropiedad);
strcat(sPropiedadTemp, "]\n\0");
//Abrimos el fichero que trae las propiedades del level que toca
FILE *f = fopen("fichero.txt", "r");
//Recorremos el fichero hasta que encontramos la propiedad
while (strcmp(cadena,sPropiedadTemp)!=0)
{
fgets(cadena, 200, f);
}
//Una vez encontrada avanzamos las lineas necesarias para coger el atributo
while (iLineaTemp<iLinea){
fgets(cadena, 200, f);
iLineaTemp++;
}
//Cerramos el fichero
fclose(f);
//Antes de devolver la cadena le quitamos el retorno de carro final
strncpy(sResultado,cadena,strcspn(cadena, "\n"));
return sResultado;
}
El problema esta en que a la salida de la funcion cargo la imagen con la cadena que me devuelve, pero algo va mal y a pesar de que la cadena aparece bien escrita haciendo un printf el programa casca al intentar cargar la imagen. Sin embargo si me salto la funcion y le asigno yo la imagen a mano si funciona, es decir:
sResultado = "e_robotic_1.png";
sResultado2=funcion_LeerPropiedad("ENEMIE_0",1);
atpArrayEnemigos.lista[iControlEnemigoActual].superficie = load_image(sResultado);
Usando la variable sResultado, la carga bien, pero usando la variable sResultado2 casca.
Esta claro que es un problema de la funcion, que manipulo mal las cadenas y algun caracter raro se queda por ahi que no aparece en el printf pero al intentar cargar la imagen no lo pasa por alto y casca :S.
A ver si alguien me puede echar un cable para hacer la funcion sin mis chapuzas y que las cadenas salgan bien, porque no soy capaz :(
ayuda pordioooooo xD
Un saludo!
Os escribo esto aqui porque estoy desesperaito xD estoy implementando ahora en el BugaFactor el poder leer las propiedades de cada nivel desde un fichero. Las lineas del fichero podriam ser estas:
[ENEMIE_0]
e_robotic_1.png
0
100
Para leer la linea "e_robotic_1.png" haria:
LeerPropiedad( ENEMIE_0 , 1);
La funcion la he escrito asi:
#include "Ficheros.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
////////////////////////////////////////////////
//FUNCION: funcion_LeerPropiedad
/////////////////////////////////////////////////
char* funcion_LeerPropiedad( char* sPropiedad, int iLinea) {
char cadena[200];
char sPropiedadTemp[200];
char* sResultado;
int iLineaTemp=0;
//Hacemos esto para ir comparando las lineas correctamente hasta encontrar la propiedad buscada
//De tener una cadena "texto" pasamos a tener una cadena "[texto]\n" que es como estan escritas en el fichero
sPropiedadTemp[0]='[';
sPropiedadTemp[1]='\0';
strcat(sPropiedadTemp,sPropiedad);
strcat(sPropiedadTemp, "]\n\0");
//Abrimos el fichero que trae las propiedades del level que toca
FILE *f = fopen("fichero.txt", "r");
//Recorremos el fichero hasta que encontramos la propiedad
while (strcmp(cadena,sPropiedadTemp)!=0)
{
fgets(cadena, 200, f);
}
//Una vez encontrada avanzamos las lineas necesarias para coger el atributo
while (iLineaTemp<iLinea){
fgets(cadena, 200, f);
iLineaTemp++;
}
//Cerramos el fichero
fclose(f);
//Antes de devolver la cadena le quitamos el retorno de carro final
strncpy(sResultado,cadena,strcspn(cadena, "\n"));
return sResultado;
}
El problema esta en que a la salida de la funcion cargo la imagen con la cadena que me devuelve, pero algo va mal y a pesar de que la cadena aparece bien escrita haciendo un printf el programa casca al intentar cargar la imagen. Sin embargo si me salto la funcion y le asigno yo la imagen a mano si funciona, es decir:
sResultado = "e_robotic_1.png";
sResultado2=funcion_LeerPropiedad("ENEMIE_0",1);
atpArrayEnemigos.lista[iControlEnemigoActual].superficie = load_image(sResultado);
Usando la variable sResultado, la carga bien, pero usando la variable sResultado2 casca.
Esta claro que es un problema de la funcion, que manipulo mal las cadenas y algun caracter raro se queda por ahi que no aparece en el printf pero al intentar cargar la imagen no lo pasa por alto y casca :S.
A ver si alguien me puede echar un cable para hacer la funcion sin mis chapuzas y que las cadenas salgan bien, porque no soy capaz :(
ayuda pordioooooo xD
Un saludo!