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

Problema con variables de una clase

Estas en el tema de Problema con variables de una clase en el foro de C/C++ en Foros del Web. Hola, que tal? Bueno mi problema es el siguiente. He creado una clase "Proyecto" en ella declaro unas variables y unos métodos, al igual que ...
  #1 (permalink)  
Antiguo 31/05/2013, 14:15
 
Fecha de Ingreso: diciembre-2011
Mensajes: 17
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Problema con variables de una clase

Hola, que tal?

Bueno mi problema es el siguiente. He creado una clase "Proyecto" en ella declaro unas variables y unos métodos, al igual que su constructor,y aquí es donde esta el problema.La verdad me resulta difícil explicarlo ya que no le veo la lógica. Bien dejare el codigo para que lo veáis:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string.h>
#include <string>
#include <sys/stat.h>

using namespace std;

class Proyecto
{
private:
int id;
char f_ini[10];
char f_fin[10];
char nom[30];
char des[80];
public:
Proyecto(char c_nom[30],char c_des[80],char c_f_ini[10],char c_f_fin[10]);
void mostrarProyecto();

~Proyecto();
};

Proyecto::Proyecto(char c_nom[],char c_des[],char c_f_ini[],char c_f_fin[])
{
strcpy (f_ini,c_f_ini);
strcpy (f_fin,c_f_fin);
strcpy (nom,c_nom);
strcpy (des,c_des);


cout<<"valor de argv = "<<f_ini<<endl;

}

void Proyecto::mostrarProyecto()
{
cout<<"Identificador ====== "<<id<<endl;
cout<<"Nombre ====== "<<nom<<endl;
cout<<"Descripcion ====== "<<des<<endl;
cout<<"Fecha inicio ====== "<<f_ini<<endl;
cout<<"Fecha fin ====== "<<f_fin<<endl;
}

int main (int argc, char *argv[])
{
int i;
//char comm1[]="-altaProyecto";//comando
Proyecto *proy;

proy = new Proyecto(argv[3],argv[5],argv[7],argv[9]);
proy->mostrarProyecto();

return 1;
}


Una vez compilado,al ejecutar lo de la siguiente manera, el resultado es este:
comando : ./proyecto -altaProyecto -nombre john -descripcion prueba -fecha_ini 29/03/2004 -feha_fin 29/03/2005

resultado:

valor de argv = 29/03/200429/03/2005john
Identificador ====== 0
Nombre ====== john
Descripcion ====== prueba
Fecha inicio ====== 29/03/200429/03/2005john
Fecha fin ====== 29/03/2005john

como veis me concatena los datos que le paso, y si vario el orden en que declaro las variables en la clase el resultado es diferente. no entiendo nada,ya que el orden en que se declaran no tiene relevancia,no?si alguien pudiera explicármelo le estaría muy agradecido.
  #2 (permalink)  
Antiguo 01/06/2013, 04:15
 
Fecha de Ingreso: mayo-2013
Ubicación: Granada
Mensajes: 8
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Problema con variables de una clase

Muy buenas John,

el problema no es más que una tontería y es que al usar cadenas clásicas de c, las que terminan con un '\0' se debe reservar memoria para este último carácter. Tu formato de fecha (29/03/2004) tiene exactamente 10 caracteres, lo mismo que la cadena donde quieres guardarla. Simplemente reservando un caracter más se soluciona el problema.

Por cierto, si usas memoria dinámica acuérdate siempre de liberar el puntero.

Un saludo.
  #3 (permalink)  
Antiguo 01/06/2013, 05:28
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Problema con variables de una clase

En C++ hay una clase (string) que te libra de todo eso:

Código C++:
Ver original
  1. string Texto = "Cosita Linda";
  2.  
  3. Texto = "ABCDEFGHIJKLMNOPQRTST"; //Operador de asignacion, funciona incluso aunque la cadena sea mas grande que la anterior
  4.  
  5. Texto += "Otra cadena"; // Operador + para concatenar cadenas
  6.  
  7. cout<<Texto.size(); // La funcion size te indica el tamanyo de la cadena
  8.  
  9. if (Texto == "Esto") // Operador ==
http://www.cplusplus.com/reference/string/string/

Etiquetas: clase, int, string, struct, variable, variables
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 23:31.