C/Visual C - CADENAS

 
Vista:

CADENAS

Publicado por Daniel Morales (1 intervención) el 23/11/2005 23:55:08
Hola, he creado una clase c++ para el manejo de strings.. pero al momento de mostrarlas aveces sucede algo como:

MiClaseCadenas c1 = "Ejemplo 1";

MessageBox(0,c1,"Titulo",0);

y el message box muestra:

"Ejemplo 1windir=C:\WINDOS..."

o

"Ejemplo 1ROOT=c:\WINDOS"...

etc..

que me esta faltando?.. algo de liberar memoria?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:CADENAS

Publicado por fernando.gomez (1603 intervenciones) el 24/11/2005 01:57:36
Quizás sea más bien algo relacionado con la basura en memoria. ¿Puedo ver el código de tu constructor de la clase y la sobrecarga del operador de asignación?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:CADENAS

Publicado por chuidiang (73 intervenciones) el 24/11/2005 14:19:45
Hola:

Tiene pinta de que te falta un \0 al final y que se ve la basura que hay detrás.

Ten en cuenta que todas las cadenas acaban en un caracter \0. Cuando en tu clase copias una cadena que te pasan, o bien haces la copia con la función strcpy() que lo hace bien, o bien pones tu el caracter 0 justo al final.

Este código daría un error parecido al que tienes

for (int i=0;i<strlen(cadenaOriginal);i++)
cadenaCopia[i]=cadenaOriginal[i];

Para hacerlo bien, después del bucle deberías añadir esta linea
cadenaCopìa[strlen(cadenaOriginal)]=0;

o bien en el bucle poner un <= en vez de un <, suponiendo que cadenaOriginal está bien formada y tiene su caracter 0 al final. Si no fuera así, tampoco funcionaria bien el strlen().

Si tu clase reserva dentro un array de char para copiar la cadena que te pasan, debes ademas reservarle un tamaño strlen(cadenaOriginal)+1 precisamente para dejar hueco al 0 del final.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar