.NET c++ ^Strings nach arrays und zurück

Nebulus

Vice Admiral Special
Mitglied seit
01.03.2006
Beiträge
806
Renomée
53
Hi,

ich verzweifel langsam total...

Ich Programmiere eine kleine GUI und möchte die Felder füllen und auslesen. Wie kann ich einen ^String nach einem c-array und zurück konvertieren ?

String ^s;
char c[64];

Folgendes soll möglich sein Fall 1:
s="Hallo";
c=s; // geht nicht !

Fall2:
c[0]='H';
c[1]='a';
c[2]='l';
c[3]=0x00;
s=c; // geht auch nicht !

Also wie macht mans richtig ???

DANKE für die Hilfe !
 
Arrays arbeiten mit Adressen, daher funktioniert der "="-Operator nicht so, wie du ihn einsetzt.

Ist dein Programm in C++ geschrieben? Dann benutz doch die Eigenschaften von String als Klasse, mit den entsprechenden Operatoren.
Ansonsten gibt es noch standard-Funktionen in den C-Bibliotheken, die Strings kopieren können z.B. mit strcopy und Konsorten. Allerdings sind die schon etwas angegraut... ich persönlich würde die nicht verwenden.
Dann gibt es noch die Möglichkeit das Array per Schleife zu beschreiben.
Oder du benutzt die von TiKu genannte Möglichkeit.

Du siehst, du hast die Qual der Wahl. :)
 
Hi,


die Umwandlung ist ganz einfach:

Code:
// std::string nach c string
std::string s = "Hallo";
char * c;

c = s.c_str();

// c string nach std::string
char c2[] = "Hallo";
std::string s2 = std::string(c2);

Schau dir mal die Dokumentation zu den STL-Strings an
http://www.cplusplus.com/reference/string/string/

Ich würde bei einem C++ Programm ausschließlich C++-Strings verwenden, einfach wegen dem Komfort. Und wenn du einen C String für eine eingebundene Bibliothek brauchst einfach immer .c_str() zur Umwandlung verwenden.

Grüße

Marcel
 
Ihr wisst schon, dass es hier nicht um std::string -> char-Array geht, sonden um .Net-String -> char-Array? Es geht um C++/CLI, nicht um unmanaged C++.
 
Oh ups. Das habe ich tatsächlich falsch verstanden. Wusste garnicht, dass es da auch nochmal extra eine String-Klasse gibt. Mit .net hatte ich bis jetzt nichts am Hut.

Edit: aber wenn ich mir die Doku so durchlese, dann ist das ja fast Identisch. Gibt auch einen Konstruktor der Char-Pointer entgegennimmt. Und in die andere Richtung ist nur der Name der Methode ein anderer
 
Zuletzt bearbeitet:
Ich befürchte der Threadstarter unterliegt einem ganz andren Problem. Wenn er von C-Strings spricht, liegt wahrscheinlich ANSI-Kodierung vor.
.Net benutzt intern aber immer Unicode.
Ansosnten gilt:
Fall 1:
string s = "TEST";
char[] c = s.ToCharArray( );

Fall 2:
char[] c = { 'h', 'a', 'l', 'l', 'o' };
String s = new String(c);

Aber hier gilt: Strings in .Net sind nicht 0-Terminiert,
Char-Arrays enthalten den Unicode-Wert des Zeichens, nicht ASCII.
Zum Datenaustausch mit C, wären eher die Funktionen der Encoding-Klassen relevant, zum Beispiel
Encoding.ASCII.GetString()
und Encoding.ASCII.GetBytes().
 
Zurück
Oben Unten