Char arrays zusammenfügen
-
Konvertierung nach char*
char *c = s.c_str();
Verkettung
Strings können mit dem Operator + verkettet werden. Dabei kann auf einer Seite des Ausdrucks auch
eine C-Zeichenkette vom Typ char* stehen.string s, s1, s2; s = s1 + s2; s = s1 + " xxx " + s2;
cu
-
Aber der von mir geschriebene Code ist doch dann richtig, oder?
-
ja schaut gut aus, test gleich mal!
cu
-
Juhu! Werde den Code gleich ´mal ausprobieren!
Wenn ich euch nicht hätteDanke
Danke
Danke
-
char * text1 = "ich"; char * text2 = "heiße"; char * text3 = "marius"; std::string x = text1 + text2 + text3; char * ausgabe = std::x.c_str(); MessageBox(NULL, "Test", ausgabe, MB_OK);
Oh Oh... das sieht gar nicht gut aus:
C:\Windows\Desktop\test\test.cpp(18) : error C2110: Zwei Zeiger koennen nicht addiert werden C:\Windows\Desktop\test\test.cpp(19) : error C2039: 'x' : Ist kein Element von 'std' C:\Windows\Desktop\test\test.cpp(19) : error C2440: 'initializing' : 'const char *' kann nicht in 'char *' konvertiert werden Durch die Konvertierung gehen Qualifizierer verloren Fehler beim Ausführen von cl.exe. test.exe - 3 Fehler, 0 Warnung(en)
Includes:
#include <string> #include <cstdlib> using namespace std;
Und ich dachte das ginge so einfach
-
mach es so:
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; char *ausgabe = std::x.c_str(); MessageBox(NULL, "Test", ausgabe, MB_OK);
cu surf.
-
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