Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Wstring Y Stl

Iniciado por Haddd, 16 de Marzo de 2004, 09:02:56 PM

« anterior - próximo »

Haddd

 Bien, según este código:

1er problema:


wstring s;
s=L"texto ("+L" "+__DATE__+" ";


lo que quiero es que en la variable s me aparezca al final: texto ( FECHA_SISTEMA)

Pero me da un error al compilar, me dice que no puede sumar dos punteros.

El 2º problema es que si en lugar de:


s=L"texto";


pongo:


s="texto";


me da un error porque no es unicode el string.

Esto debería ser trivial, es decir, que debería automáticamente convertirmelo a UNICODE, ¿verdad?

3er problema:

Por último quiero utilizar el sprintf, pero no sé como hacerlo utilizando wstring. Quiero algo así:


char tmp[250];int i;

sprintf(tmp,"Hola %d",i);


Podeis ayudarme por favor.

Juan Mellado

 Uhm..., hasta donde llego:

El primer problema te da porque realmente estás intentando sumar dos cadenas de carácteres, o sea, dos punteros, como dice el compilador. Debes hacer un casting de la primera cadena a wstring para que instance un objeto de la clase wstring y que utilice el operador '+' de la misma.

#define _UNICODE

#include <tchar.h>

s = (std::wstring)_T("texto (") + _T(__DATE__) + _T(")");

Nota: La macro _T() es la forma normal de trabajar con UNICODE en Win32, con la ventaja que puedes compilar para ANSI (Aunque con wstring... <_< ).

El segundo problema ocurre porque el compilador siempre considera por defecto que las cadenas son ANSI. O sea, sí, hay que hacer casting.


s = _T("texto");


Para el tercer problema sólo se me ocurre la cutre solución de reservar memoria en una variable temporal, hacer wsprintf() en la variable temporal, y asignarle la temporal a la variable definitiva.  (asco)

Saludos

Haddd

 He leido páginas sobre UNICODE y la verdad no es tan fantástico como parece. Yo creía que utilizando _T solventaba los problemas de conversión, pero no es así.

Muchas gracias por tu ayuda

ethernet

 No he usado nunca unicode pero creo q en vez de sprintf es wsprintf o algo asi.  Otra cosa q podrias usar es strstream -> http://130.15.168.200/faqs/SUNWspro/WS6U2/...trstream.3.html

saludos






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.