Forum: PC-Programmierung char* in std::string convertieren


von Klaus (Gast)


Lesenswert?

Moin!

Warum bekomme ich bei folgendem immer nur den ersten Buchstaben des 
c-strings?
1
    int main(int argc, char** argv)
2
    {
3
        std::string test(argv[1]);

Wenn ich an argv ein [] dranhänge gibt der []-Operator doch ein char* 
zurück. Und aus dem char* müsste der Konstruktor von std::string doch 
einen C-String lesen können.

von Peter II (Gast)


Lesenswert?

Klaus schrieb:
> Warum bekomme ich bei folgendem immer nur den ersten Buchstaben des
> c-strings?
>     int main(int argc, char** argv)
>     {
>         std::string test(argv[1]);
>
> Wenn ich an argv ein [] dranhänge gibt der []-Operator doch ein char*
> zurück. Und aus dem char* müsste der Konstruktor von std::string doch
> einen C-String lesen können.

könnte sein das du eine unicode projekt hast, und das 2. zeichen im 
argv[1] eine 0 ist?

von Peter II (Gast)


Lesenswert?

oder teste mal mit

 std::string test( (const char*)argv[1] );

nicht das der compiler irgenwie die überladung mit einem char 
constructor nicht hinbekommt.

von Udo S. (urschmitt)


Lesenswert?

Schau mal in dem Thread, das klingt irgendwie ähnlich:
Beitrag "Microsoft Visual Studio: Win32 Konsolenapplikation"

von Klaus (Gast)


Lesenswert?

Peter II schrieb:
> könnte sein das du eine unicode projekt hast, und das 2. zeichen im
> argv[1] eine 0 ist?

Danke, das war es! Wenn ich Unicode ausmache, geht es.

Nur mal aus Interesse: wie würde ich dass denn machen, wenn ich Unicode 
haben wollen würde? Alle Standard Funktionen wollen doch immer normale 
Zeichen haben.

von Peter II (Gast)


Lesenswert?

Klaus schrieb:
> Nur mal aus Interesse: wie würde ich dass denn machen, wenn ich Unicode
> haben wollen würde? Alle Standard Funktionen wollen doch immer normale
> Zeichen haben.

nicht undedingt, MS mappt alle C funktionen dann zu funktionen die damit 
klar kommen.

Hier z.b.

http://msdn.microsoft.com/en-us/library/78zh94ax(v=vs.71).aspx

Ich muss aber sagen das ich bis jetzt auf unicode verzichtet habe, keine 
ahnung was man alles umtellen muss damit auch std::string damit klar 
kommt.

Wenn ich Unicode nehmen muss, dann mach ich gleich C#.

von Ppp (Gast)


Lesenswert?

Auf normalen Betriebssystemen nimmt man UTF-8 in std:string. Auf Windows 
nimmt man UTF-16 in std:wstring oder konvertiert wo immer nötig von/zu 
UTF-8 aus/in std:string.

von Rolf M. (rmagnus)


Lesenswert?

Ppp schrieb:
> Auf normalen Betriebssystemen nimmt man UTF-8 in std:string.

Naja, std::string ist allerdings für UTF-8 auch nicht so besonders gut 
geeignet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.