Char arrays zusammenfügen



  • Hallo Leute!
    Kann mir einer von euch sagen (und vielleicht auch ein Codebeispiel dafür geben), wie ich 3 char arrays zusammenfügen kann?
    Mit Strings habe ich da kein Problem - doch ich habe vor, dass Ergebnis in einer MessageBox auszugeben.

    Beispiel:

    char * ausgabe;
    char * text1 = "ich";
    char * text2 = "heiße";
    char * text3 = "marius";
    

    Die Forensuche habe ich selbstverständlich 😃 schon benutzt - aber jedes Thema landete früher oder später bei Strings 🙄

    PS: Wie kann man eigentlich Strings in char-arrays konvertieren?

    Danke euch schonmal 👍



  • strcpy.
    Oder std::string benutzen.

    C-Strings sind char arrays,
    bei std::string ist es die Memberfunktion c_str().

    Devil



  • std::string x = text1 + text2 + text3;
    


  • Vielen Dank für eure Antworten!

    Wie kann ich denn jetzt einen String in ´ner MessageBox ausgeben?
    Kann ich einfach so den String einsetzen?

    Zum Beispiel:

    std::string x = text1 + text2 + text3;
    MessageBox(NULL, "Test", x, MB_OK);
    

    (Ich weiß - die Messageboxen gehören nach WinAPI - aber es geht mir ja nur um die Strings)

    Vielen Dank 🙂



  • ne, du brauchst einen char*
    das geht mit
    x.c_str()



  • Danke! Also lautet der Code dann so:

    std::string x = text1 + text2 + text3;
    char * ausgabe = std::x.c_str();
    MessageBox(NULL, "Test", ausgabe, MB_OK);
    

    ...oder nicht?



  • 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().


Anmelden zum Antworten