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ätte 🙂

    Danke 👍 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 nicht 😞

    C:\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 😕


Anmelden zum Antworten