[C con Clase] Steven bloqueo

rodolfo rosso paz rodolforossopaz en hotmail.com
Jue Mayo 31 17:33:42 CEST 2007


Hola Steven ,

gracias, te pasaste,  eso era justamente lo que estaba buscando hacer,
lo haces parecer tan simple que uno se dice,
¡¡ Claro, como no lo pense antes ¡¡,  JA,  ¡¡ Si, como no ¡¡

No se en que parte del mundo estas, pero es genial porque pongo mi correo 
por la
noche, cuando ya el cerebro no da mas, y encuentro la respuesta temprano en 
la
mañana.

Por cierto, si sabia lo del 0 al final del arreglo y lo de los subindices 
que
comienzan en 0, pero fue un lapsus brutus por el cansancio.

Que Dios los bendiga a ti, y a todos los de la lista.

Rodolfo



>From: Steven Davidson <steven en conclase.net>
>Reply-To: Lista de correo sobre C y C++ <cconclase en listas.conclase.net>
>To: cconclase en listas.conclase.net
>Subject: Re: [C con Clase] bloqueo
>Date: Thu, 31 May 2007 00:50:50 -0500
>
>Hola Rodolfo,
>
>El pasado 2007-05-31 05:05:07, rodolfo escribió:
>
>r> /* Hola a Todos.-
>r> Como siempre quiero comenzar agradeciendo a los que contestaron mi 
>último
>r> correo,
>r> en este caso fue Steven, como siempre tan didactico, punto aclarado,
>r> gracias.
>
>De nada; para eso estamos.
>
>r> Pero ahora tengo un bloqueo casi existencial con los punteros y las
>r> referencias
>r> a punteros y todo eso. Ojalá me pueda hacer entender.
>
>Primeramente, me temo que no nos has dado el mensaje de error que te 
>lanzaba el compilador ni el código erróneo que escribiste. Por lo tanto, no 
>sé cuál ha sido tu problema o error exactamente. En segundo lugar, el hecho 
>de que un array sea tratado como un puntero constante no tiene nada que ver 
>con que sea o no un 'lvalue'. Al fin y al cabo, no vamos a modificar el 
>valor de tal dirección de memoria, sino los valores a partir de esta 
>dirección. La constancia está en la dirección de memoria y no en los 
>'char'. Simplemente haz lo siguiente:
>
>class Palabra
>{
>public:
>   ...
>   char * ObtieneX()  { return x; }
>
>private:
>   char x[5];
>};
>
>
>Ahora bien, seguramente el problema que estás teniendo provenga de la forma 
>en que manipulabas la cadena. Si haces lo siguiente, tendremos problemas:
>
>void noMiembro( Palabra &p, const char val[5] )
>{
>   p.ObtieneX() = val;
>}
>
>Recuerda que aquí estaríamos tratando direcciones de memoria; y nada más. 
>Lo que queremos hacer es copiar el contenido guardado en estas direcciones 
>de memoria. En este caso, sugiero usar la función estándar 'strcpy()' o 
>incluso 'strncpy()'. Por ejemplo,
>
>void noMiembro( Palabra &p, const char val[5] )
>{
>   strncpy( p.ObtieneX(), val, 5 );
>}
>
>Con esto, copiamos los caracteres de una cadena a la otra.
>
>r>    // 1. constructor
>r>    Palabra()
>r>    // { x[1] = 'M'; x[2] = 'a'; x[3] = 'm'; x[4] = 'a'; x[5] = '0'; } //
>
>Por cierto, esto no es correcto. Tienes dos errores lógicos:
>
>1. Los índices de los arrays SIEMPRE empiezan por 0 (cero).
>2. Sugiero vehementemente terminar las cadenas de caracteres en el carácter 
>nulo. Creo que esto era lo que querías hacer, pero me temo que simplemente 
>has asignado el carácter '0'. El carácter nulo es '\0' o sencillamente 0 
>(cero).
>
>Al final, obtendremos lo siguiente:
>
>Palabra()
>{ x[0] = 'M'; x[1] = 'a'; x[2] = 'm'; x[3] = 'a'; x[4] = '\0'; }
>
>O incluso:  x[4] = 0;
>
>
>Espero haber aclarado las dudas.
>
>Steven
>_______________________________________________
>Lista de correo Cconclase Cconclase en listas.conclase.net
>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

_________________________________________________________________
MSN Amor: busca tu ½ naranja http://latam.msn.com/amor/





Más información sobre la lista de distribución Cconclase