Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Corrupcion con UnicodeString en b2009

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Corrupcion con UnicodeString en b2009 Responder citando

UnicodeString cad1,cad2;
cad1= "caca";
cad1.w_str();
cad1.t_str();
cad1.c_str();


Con este sencillo ejemplo entendereis lo que quiero decir, quizas mas de uno se halla ya enfrentado al problema o se enfrentara en el futuro con lo subyacentes dolores de cabeza.

cad 1 = "caca"; Con esta instruccion asignamos la cadena caca a la clase, y ella sola se apaña, de manera que si inspeccionamos...

cad1.w_str(); //encontramos que en se compone de un array creo que de enteros de la siguiente forma

[0] = 'c' = 0x0063
[1] = 'a' = 0x0061
[2] = 'c' = 0x0063
[3] = 'a' = 0x0061
[4] = '\0' = 0x0000

lo curioso es que en el momento de usar c_str() o t_str() (no se cual es la diferencia), nuestra clase se corrompe y ocurre lo siguiente en .w_str()
y por lo tanto queda corrupta nuestra clase y lo que aparentemente vemos en ella.

[0] = 'c' = 0x6361
[1] = 'a' = 0x6361
[2] = '\0' = 0x0000

sin embargo c_str() y t_str() obtienen

[0] = 'c' = 0x63
[1] = 'a' = 0x61
[2] = 'c' = 0x63
[3] = 'a' = 0x61
[4] = '\0' = 0x00

de manera que la funcion funciona pero corrompe de alguna manera el resultado guardado en la clase, juntando de 2 en 2 bytes los caracteres almacenados.

yo demomento huyo del problema usando AnsiString o copiando los valores en otras variables UnicodeString para no corromper las originales, a parte de eso tambien ocurren otros fenomenos extraños como "cac\x018" cadenas cuyo ultimo caracter se corrompe en ocasiones.

Gracias, saludos y espero que alguien se anime a investigarlo.

https://forums.codegear.com/message.jspa?messageID=38875
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

No me hagas mucho caso porque no tengo instalado Builder 2009, pero lo que dices me suena a que la clase UnicodeString usó tu cadena inicial como unicode y siempre estuvo corrupta.

Prueba esto:
Código:
cad1= L"caca"; 


Pienso que funcionará, pero repito, no me hagas mucho caso, no he podido probarlo.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

O bien usa
Código:

cad1 = TEXT("caca");

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

mira q lo complican.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.