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

¿ Por qué la variable cad de la función to_string() retorna basura ?

Estas en el tema de ¿ Por qué la variable cad de la función to_string() retorna basura ? en el foro de C/C++ en Foros del Web. Básicamente el problema es el siguiente: en la función to_string(), antes del return, la variable cad retorna un string limpio, pero al invocar la función ...
  #1 (permalink)  
Antiguo 19/08/2014, 09:58
 
Fecha de Ingreso: agosto-2013
Ubicación: Canelones
Mensajes: 6
Antigüedad: 10 años, 8 meses
Puntos: 0
¿ Por qué la variable cad de la función to_string() retorna basura ?

Básicamente el problema es el siguiente: en la función to_string(), antes del return, la variable cad retorna un string limpio, pero al invocar la función to_solution(to_string()), la cadena devuelta imprime basura ni bien entra a esa otra función.

¿ Cuál puede ser el problema ?

P.D: no se debe cambiar los encabezados de las funciones, ni se debe llamarlas de otra manera.

Código:
    char* to_string(Rarray<Partido**> sol1) 
    {
    
    int TAM=1000;
    //int TAM = 5 // la fecha + el dia + el ';' + los '()' + la ','
    
    static char* cad = NULL;
    char* retornar= NULL;
    //char *cad, *retornar = NULL;
    cad = new char[TAM];
    char buffer[4];
    retornar = cad;
	
    //strcpy(retornar,"");
	
	
    for(int i=0;i<DIMENSION_PROBLEMA;i++){
    for(int j=0;j<DIMENSION_PROBLEMA;j++){
    
    strcat(retornar,"(");
    int fecha = sol1[i][j]->getFecha();
    sprintf(buffer,"%d",fecha);
    strcat(retornar,buffer);
    strcat(retornar,",");          
    int dia = sol1[i][j]->getDia();
    sprintf(buffer,"%d",dia);
    strcat(retornar,buffer);
    strcat(retornar,")");
    }
    if(i!=DIMENSION_PROBLEMA-1){
    strcat(retornar,";");
    }
    }
  
    // cout << prueba << endl;*/
    cout <<"La cadena cad antes del return es: "<< cad << endl;
    cout <<"La cadena retornar antes del return es : " <<retornar << endl;
    //cout <<"La direccion de memoria de cad[0] antes del return es: " << &cad)<<endl;
    return &cad[0];
  	
    }


    void to_Solution(char *_string_, Rarray<Partido**> &_var){ 
    //en realidad el cabezal es: Solution::to_Solution(char *_string_)
    //tambien hay que sustituir DIMENSION_PROBLEMAENSION_PROBLEMA por          pbm.DIMENSION_PROBLEMAension()

    //PRIMERO ACOMODO CADA FILA EN CADA CELDA DEL ARREGLO SUBSTRING
    char* substring[DIMENSION_PROBLEMA];
    char* p;
    char* aux;
	 
    p =strtok(_string_,";");
    aux=p;
    substring[0]=aux;
    int pos=1;
    while (p){
    p=strtok(NULL,";");
    if (p){
    aux=p;
    substring[pos]=aux;
    pos++;
    }
    }
	//AHORA PROCESO CADA CELDA DEL ARREGLO DE FORMA DE OBTENER LOS NROS DE 
	//LA FILA PARA IR GUARDANDO EN EL SOLUTION
    char* subcadena_aux;
    for (int i=0; i<DIMENSION_PROBLEMA; i++){	

    int j=1;//me muevo por el char*
    int acumulador=0;
    subcadena_aux = substring[i];
    cout << "SUBCADENA: "<< i << endl;
    while(acumulador<DIMENSION_PROBLEMA){

    subcadena_aux = substring[i]+j;
    p = strtok(subcadena_aux, ",");
    int tam_primer_num=strlen(p);
    int fecha = atoi(p);
    cout << "El primer numero es: " << fecha << endl;
    p = strtok(NULL, ")");
    int tam_segundo_num=strlen(p);
    int dia = atoi(p);
    cout << "El segundo numero es: " << dia << endl;
    _var[i][acumulador]->setFecha(fecha); //descomentar
    _var[i][acumulador]->setDia(dia);     //descomentar
    j = j + tam_primer_num + tam_segundo_num + 3;//el tres  es por los caracteres extras de   la cadena
    acumulador++;
    }
    }
	
    } //end Solution::to_Solution



    int main() {
    //EJEMPLO DE UNA ENTRADA DE STRING CON DIMENSION_PROBLEMA 4
    //char entrada[]= "(-1,-1)(2,1)(3,4)(1,2);(1,2)(-1,-1)(2,1)(3,4);(3,4)(1,2)(-1,-1)(2,1);(2,1)(3,4)(1,2)(-1,-1)";
    int arreglo1[DIMENSION_PROBLEMA-1];
    Rarray<Partido**> sol1(DIMENSION_PROBLEMA);
    Rarray<Partido**> sol2(DIMENSION_PROBLEMA);
    inicializar(sol1, arreglo1);
    rellenar(arreglo1,sol1);

    //char* salida = to_string(sol1);
    //cout << " La salida es: "<< salida << endl;

    to_Solution(to_string(sol1),sol2);
    ImprimirMatriz(sol2);
    return 0;
    }
  #2 (permalink)  
Antiguo 19/08/2014, 14:00
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ¿ Por qué la variable cad de la función to_string() retorna basura ?

cad ya es un puntero a char. Debes devolver simplemente:

return cad;


Un saludo

Etiquetas: basura, ejemplo, funcion, int, retorna, string, variable
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 15:09.