PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "string" zu "string" umwandlung


Matrix316
2007-01-11, 17:10:54
Wie wandle ich denn:

char text[10]

am einfachsten zu

const WCHAR* textneu

?

Ein Versuch mit:

WCHAR* text_x;
wctomb(text,*text_x);
const WCHAR* textneu = text_x;

Funktioniert nicht so richtig.

EDIT:

Das hier geht leider auch nicht.

char text[10] = "Hallo";
const WCHAR *lstrg = NULL;
wcstombs(text,lstrg,sizeof(text));

Könnte aber sein, dass dort irgendwo ein Fehler ist.

Trap
2007-01-11, 17:43:37
Ich denke du benutzt die Funktion für die umgekehrte Richtung, das wäre die richtige:
http://msdn2.microsoft.com/en-us/library/k1f9b8cy(VS.80).aspx

Benutzt hab ich sowas noch nie, musst selber gucken ob es wirklich so ist.

Matrix316
2007-01-11, 18:49:09
Hm, funzt auch nicht so richtig:

char text[11] = "1234567890";
wchar_t *lstrg = NULL;

mbstowcs(lstrg,text,10);

printf("%s",lstrg);

Bekomme (null) als Ausgabe von printf...

Trap
2007-01-11, 18:54:21
Das ist die dokumentierte Verhaltensweise, wenn man es so aufruft wie du es tust. Beschreibung lesen hilft ;)

del_4901
2007-01-11, 19:01:59
Wenn du nur mit Literalen arbeitest, kannst du auch

wchar_t bla[] = L"Hallo";

schreiben.

Matrix316
2007-01-11, 19:13:18
Das Problem ist, ich lese Strings aus einem Textfile und muss diese dann zu WCHAR * konvertieren (alternativ auch const WCHAR*) um diese dann in der GDI+ Methode DrawString zu verwenden zu können.


FILE *stream;
char line[11];
stream = fopen( "c:\\ptswerte.txt", "r" )
fgets( line, 11, stream );


jetzt umwandeln und dann einsetzen in:

Status DrawString( const WCHAR *string,
INT length,
const Font *font,
const RectF &layoutRect,
const StringFormat *stringFormat,
const Brush *brush
);



EDIT:
Irgendwie blick ich da nicht ganz durch mit der oberen Funktion. Gibts nicht eine Anleitung zur Anleitung, die etwas einfacher ist? ;)

Jedenfalls bekomm ich jetzt eine 1 als Ausgabe:

size_t size;
char text[11] = "1234567890";
WCHAR *lstrg = NULL;

int requiredSize = mbstowcs(NULL, text, 0);

lstrg = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));
size = mbtowc(lstrg,text,requiredSize +1);

_cprintf("%s",lstrg);

Matrix316
2007-01-11, 19:25:47
Juhu! Habs:


size_t size;
WCHAR *lstrg = NULL;

int requiredSize = mbstowcs(NULL, line, 0); //line ist Text aus file

lstrg = (wchar_t *)malloc( (requiredSize + 1) * sizeof( wchar_t ));
size = mbstowcs(lstrg,line,strlen(line)+1);


EDIT: Eine Zusatzfrage:

Kann ich eigentlich nicht mit WCHAR einen Array erstellen:

WCHAR array[100];

um dann sowas wie

array[index] = *lstrg ;

zu machen?

Irgendwie bekomm ich nur Quatsch, wenn ich auf array[0] oder so zugreife.