Logo

¡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.
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.