char to string & string to char
-
wie konvertiere ich char in string und wie andersrum?
und wie setze ich 2 chars zusammen?
das hier stürzt immer ab
char test[] = "c:/"; strcat( test, "arial.ttf" );
-
oh man
warum muss man in char anzahl der arrays angeben?
es ist immer ungewiss wie lang char sein wirdbei string to char hab ich c_str(); rausgefunden
aber wie andersrum?
wie setzte ich 2 chars ungewiss zusammen
-
Die Funktion "char *strcat(char* a, const char * b)" nimmt den Text aus b und hängt in an a an. Soweit bist du richtig.
Allerdings erwartet strcat das du in a genügen Speicher bereitstellst, was du nicht tust.
Bei dir ist a ein char[4] mit folgen Werten :
Offset 0 1 2 3
Wert c : / \0du brauchst weitere 9 Byte Speicher für die Unterbringung von "arial.ttf".
probier mal folgenden Code und seh dier die unterschiede zwischen der ersten und zweiten Variante an. Dann sollte es klar werden.
//Variante 1 char test[] = "c:/"; strcat( test, "arial.ttf" );//Variante 2 char test[14] = "c:/"; strcat( test, "arial.ttf" );
-
Oder so:
char n1[] = "test"; char n2[] = "test2"; char *n3 = new char[strlen(n1) + strlen(n2) + 1]; sprintf(n3, "%s%s", n1, n2);Aber das ist C. Nicht C++.
-
Warum überhaupt char* und nicht immer string?
char test[] = "c:/"; std::string tstr = test; //Konvertierung char in string tstr += "arial.ttf"; //String anhängen
-
Braunstein schrieb:
Warum überhaupt char* und nicht immer string?
char test[] = "c:/"; std::string tstr = test; //Konvertierung char in string tstr += "arial.ttf"; //String anhängenVielleicht, weil es Funktionen gibt, die einfach ein char* benötigen (z.B. PathRemoveFileSpec).
-
Dann kannst du trotzdem std::string benutzen, denn ein String hat die Medthode c_str() die einen C-Style String zurück liefert. :p
-
... die einen konstanten C-Style String zurückliefert wäre richtig.
:p
-
Naja mitm String auf bsw. ein Zeichen => Zeichenkette umwandeln find ich nen bissel übertrieben

const char my_char('a'); char my_string[2] = { my_char, 0 };wäre da einfacher

-
Ich bin zwar noch C++-Anfänger, kann mir aber kaum vorstellen, dass Folgendes funktioniert:
std::string sTmp="C:\temp\test.txt"; PathRemoveFileSpec(sTmp.c_str()); //sTmp=="C:\temp\"Ich lasse mich aber gerne eines Besseren belehren. Ich bin zuhause und habe hier momentan keine Entwicklungsumgebung (neuer Rechner), sonst hätte ich es direkt ausprobiert.
Gruß Matze
-
Hmm nein geht auch nicht. Aber das hat nix mit std::string zu tun

const std::string temp("C:\\Temp\\Test.txt");du hast Escaped-Zeichen vergessen

const std::string temp("C:\\Temp\\Test.txt"); RemovePathSpecification(temp.c_str());.
-
Stimmt, es wird nicht funktionieren, weil die Funktion PathRemoveFileSpec einen in-out-Parameter (non-const) hat. Das wurde in diesem speziellen Fall nicht beachtet. Naja, ein Grund mehr von diesen C-APIs weg zu kommen.

-
Man muß natürlich sagen, das man so eine Funktion als C++ler eigentlich nicht bräuchte. Diese API-Funktion von Windows ist sicherlich eine große Hilfe für C-Programmierer. Aber für C++?
std::string str("C:\\temp\\test.txt"); str.resize( str.find_last_of('\\') ); // kein PathRemoveFileSpec nötig!
-
Artchi schrieb:
Man muß natürlich sagen, das man so eine Funktion als C++ler eigentlich nicht bräuchte. Diese API-Funktion von Windows ist sicherlich eine große Hilfe für C-Programmierer. Aber für C++?
std::string str("C:\\temp\\test.txt"); str.resize( str.find_last_of('\\') ); // kein PathRemoveFileSpec nötig!Gut zu wissen!
Zum Thema char*: Auch wenn es nicht mehr nötig sein mag. Ich denke, es kann nicht schaden, auch mal char-Arrays kennenzulernen. Vor allem, wenn man auch mal andere Sachen als Windows-Programme machen will/muss. Das habe ich gemerkt, als ich durch meine neue Arbeit gezwungen war, Microcontroller zu programmieren. Auf 2 KB Flash die std::string-Klasse unterzubringen wäre wohl sehr dreist...

Gruß Matze