Char arrays zusammenfügen
-
Das nützt immer noch nichts. Du musst den Rückgabewert von c_str() einem const char* zuweisen.
-
Hi!
Vielen Dank für die schnelle Antwort!
Leider funktioniert der Code auch nichtC:\Windows\Desktop\test\test.cpp(17) : error C2228: Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein C:\Windows\Desktop\test\test.cpp(18) : error C2228: Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein C:\Windows\Desktop\test\test.cpp(19) : error C2228: Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein C:\Windows\Desktop\test\test.cpp(23) : error C2039: 'x' : Ist kein Element von 'std' C:\Windows\Desktop\test\test.cpp(23) : error C2440: 'initializing' : 'const char *' kann nicht in 'char *' konvertiert werden Durch die Konvertierung gehen Qualifizierer verloren
-
Außerdem heisst es nicht std::x.
-
OK - hab jetzt das std:: vor x.c_str(); gelöscht und char * durch const char* ersetzt. Aber der Fehler
Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein
bleibt leider trotzdem
-
hast du <string> includet?
-
Ja, hab ich - aber ich kann ja auch mal den gesamten Code posten:
#include <windows.h> #include <string> #include <cstdlib> using namespace std; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char *text1 = "ich"; char *text2 = "heiße"; char *text3 = "marius"; string s1 = text1.c_str(); string s2 = text2.c_str(); string s3 = text3.c_str(); std::string x = s1 + s2 + s3; const char *ausgabe = x.c_str(); MessageBox(NULL, "Test", ausgabe, MB_OK); return 0; }
-
c_str ist eine Memberfunktion von std::string,
und nicht von char *Devil
-
Jetzt lass doch mal das dumme char* endlich weg.
string s1 = "Hallo, ihr Mongos".
Und wenn mal eine Funktion wirklich nen const char* braucht, dann übergibst du s1.c_str().
-
ewefewfwefwef schrieb:
Ja, hab ich - aber ich kann ja auch mal den gesamten Code posten:
#include <windows.h> #include <string> #include <cstdlib> using namespace std; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { char *text1 = "ich"; char *text2 = "heiße"; char *text3 = "marius"; string s1 = text1.c_str(); string s2 = text2.c_str(); string s3 = text3.c_str(); std::string x = s1 + s2 + s3; const char *ausgabe = x.c_str(); MessageBox(NULL, "Test", ausgabe, MB_OK);
äh, naja, es geht auch so:
char *text1 = "ich"; char *text2 = "heiße"; char *text3 = "marius"; MessageBox(NULL, "Test", ((std::string)s1 + s2 + s3).c_str(), MB_OK);
-
OMG, jetzt wirds aber wirklich immer schlimmer. Kann man denn nicht mal mit strings arbeiten?
string s1 = "Hallo "; string s2 = "Welt!"; string s3 = s1 + s2; MessageBox(NULL, s3.c_str(), "oöusdagf", 0);
(Um's mal einfach zu halten)
-
Verzeih, doch ich nahm an, dass die C-Strings da nur Beispiele waren und man in Wirklichkeit von irgendwoher char* bekommt.
-
Achso!!!! Jetzt wird mir einiges klar!
Also ist der richtige Code:#include <windows.h> #include <string> #include <cstdlib> using namespace std; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { string text1 = "ich"; string text2 = "heiße"; string text3 = "marius"; std::string x = text1 + text2 + text3; const char *ausgabe = x.c_str(); MessageBox(NULL, "Test", ausgabe, MB_OK); return 0; }
Wenn ich die Variablen text1, text2, text3 erst als char * angebe, muss ich sie doch dann jeweils mit sprintf in einen String konvertieren, oder?
-
ewefewfwefwef schrieb:
Wenn ich die Variablen text1, text2, text3 erst als char * angebe, muss ich sie doch dann jeweils mit sprintf in einen String konvertieren, oder?
Wird hier irgendwo sprintf genannt?
schau dir einfach mal die Codes an.
-
Sorry, bin noch ein totaler Noob und versteh´ das leider immer noch nicht
Die Codes habe ich mir alle angeschaut - aber die 3 Variablen text 1-3 sind halt keine Strings, sondern char-Arrays
-
Ich meine Variablen wie zum Beispiel
char * test = "Hallo!";
-
Die Stringklasse der STL kapselt char arrays, so das
ein string dynamisch wird, und übernimmt die Allokierung
des Speichers etc.bei string s = "mystring";
wird das char array ("mystring") in ein std::string-objekt umgewandelt.
Alternativ würde dies auch über den Konstruktor gehen:
string s("mystring");Devil
-
Nee - ich meine ja Variablen vom Typ char
-
ewefewfwefwef schrieb:
Nee - ich meine ja Variablen vom Typ char
char c;
c='a';
string s=c;so schwer ist das nicht - einfach = verwenden
-
Kann mir mal einre sagen warum es kein 'basic_string(charT foo)' gibt? Also einen Konstruktor, der ein einzelnes Zeichen verwendet. Ich darf dann immer string(1, zeichen) schreiben. Das nervt irgendwie. Vermutlich kommt sowas in der Regen nicht oft vor, aber ich brauchte das gerade ziemlich häufig.
-
VIEEEEELLLENNN DANK!!! Das war´s!
Wenn doch alles so einfach wäreIch danke euch vielmals für die ganzen Antworten!
Und sorry, dass ich so viel missverstanden habe- aber ich denke mal,
dass das die Newbies so an sich habenFettes
Sorry