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