char nach char Konvertieren



  • EEK@work schrieb:

    So

    char text = 'abc';
    

    Nein, bestimmt nicht! Was soll denn rauskommen? Ausprobiert und text ist dann c. Mein Compiler sagt dazu:

    main.cpp:8: warning: overflow in implicit constant conversion
    

    Und Overflow ist nie gut.



  • Scorcher24 schrieb:

    EEK@work schrieb:

    So

    char text = 'abc';
    

    und nicht so

    char text = "abc";
    

    Das geht nicht. 1 char ist 1 zeichen. Mehrfache gehen da nicht.
    Was du willst:

    char* text = new char[strlen("abc")];
    strcpy(text, "abc");
    // Irgendwas damit machen
    delete char;
    
    // oder:
    char text[3] = { 'a', 'b', 'c' };
    

    rya.

    Ups, stimmt. Man sollte sich den Quellcode genau anschauen. Ich dachte er will nur ein Zeichen kopieren.



  • Scorcher24 schrieb:

    Das geht nicht. 1 char ist 1 zeichen. Mehrfache gehen da nicht.
    Was du willst:

    char* text = new char[strlen("abc")];
    strcpy(text, "abc");
    // Irgendwas damit machen
    delete char;
    
    // oder:
    char text[3] = { 'a', 'b', 'c' };
    

    rya.

    Wenn dann wohl

    delete [] text;
    

    wenn ichs nicht falsch habe.

    Plus, wieso den Speicher selber anfordern? Und vor allem, wieso nicht std::string?

    Edit: Beim "//oder:" Teil fehlt übrigens auch die terminierende '\0'.



  • Hiermit kann ich nicht so recht was anfangen ...

    char* text = new char[strlen("abc")]; 
    strcpy(text, "abc"); 
    // Irgendwas damit machen 
    delete char; 
    
    // oder: 
    char text[3] = { 'a', 'b', 'c' };
    

    Ich hab jetzt so gelöst:

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    
    char text[20] = {'a','b','c'};
    char speicher[20];
    
            for (int i=0;i<4;i++)
            {
            speicher[i] = text[i];
            }
    
            for (int j=0; j<4;j++)
            {
            cout<<speicher[j];
            }
    system("PAUSE");
    }
    

    Aber trotzdem würde mich interessiere was hier so passiert:

    char* text = new char[strlen("abc")];
    strcpy(text, "abc");
    delete char;

    Kennt wer eine Seite wo man das nachlesen kann?
    Hab kp wo nach ich da jetzt googeln sollte.



  • Also dein Code ist eher suboptimal und geht mehr in Richtung C. Das koennte dir helfen, wenn du alles durchliest: http://www.cs.cf.ac.uk/Dave/C/



  • // hier wird Speicher für char angefordert und zwar in der Länge von "abc". 
    char* text = new char[strlen("abc")];
    
    // Hier wird "abc" in diesen Speicher kopiert
    strcpy(text, "abc");
    
    // Hier wird der Speicher an das OS zurückgegeben
    delete [] text;
    

    rya.



  • #include <iostream>
    #include <fstream> // Wozu inkludierst du fstream?
    using namespace std;
    
    int main()
    {
    
    char text[20] = {'a','b','c'}; // '\0' vergessen anzugeben
    char speicher[20];
    
    // falsch eingerückt *hust*
    // außerdem viel zu kompliziert.
    // wenn du C++ programmieren willst bitte auch STL inkl. std::string nutzen (siehe unten)
    
            for (int i=0;i<4;i++)
            {
            speicher[i] = text[i];
            }
    
            for (int j=0; j<4;j++)
            {
            cout<<speicher[j];
            }
    system("PAUSE"); // auch böse, benutz besser cin
    }
    

    Ich hätte es wahrscheinlich so gelöst:

    #include <iostream>
    
    int main()
    {
        std::string text = "buuh";
        std::string speicher;
    
        speicher = text;
        std::cout << speicher;
    
        std::cin.ignore();
        return 0;
    }
    


  • Scorcher24 schrieb:

    // hier wird Speicher für char angefordert und zwar in der Länge von "abc". 
    char* text = new char[strlen("abc")];
    
    // Hier wird "abc" in diesen Speicher kopiert
    strcpy(text, "abc");
    
    // Hier wird der Speicher an das OS zurückgegeben
    delete [] text;
    

    rya.

    oO. -> man strcpy:

    The  strcpy()  function  copies the string pointed to by src, including
    the terminating null byte ('\0')
    

    Du reservierst Platz fuer 3 chars und kopierst 4. Nein! Eine bessere alternative ist strncpy.



  • knivil schrieb:

    oO. -> man strcpy:

    The  strcpy()  function  copies the string pointed to by src, including
    the terminating null byte ('\0')
    

    Du reservierst Platz fuer 3 chars und kopierst 4. Nein! Eine bessere alternative ist strncpy.

    Kopiert strcpy nicht solange bis es ein '\0' entdeckt? Das wären noch ein paar Bytes mehr. Siehe dieses Beispiel:

    #include <iostream>
    
    int main()
    {
    	char text1[5] = {'h', 'a', 'l', 'l', 'o'};
    	char* padding = "buuh";
    	char* addition = new char[20];
    
    	strcpy(addition, text1);
    	std::cout << addition;
    
    	delete [] addition;
    
    	std::cin.ignore();
    	return 0;
    }
    


  • ahhh zu früh gefreut 😞

    Was ich nun genau machen will:

    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    char text = 65;
    char speicher;
    
    speicher = text;
    
    cout << hex <<speicher;
    
    return 0;
    }
    

    Das funktioniert einwandfrei.

    Was aber wenn ich anstatt char text = 'abc'; habe ?

    Das muss doch auch irgendwie gehen oder nicht ?



  • knivil schrieb:

    Du reservierst Platz fuer 3 chars und kopierst 4. Nein! Eine bessere alternative ist strncpy.

    Flüchtigkeitsfehler, aber natürlich richtig :).
    rya.



  • So jetzt aber 🙂

    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
    char *text = "abc";
    char *speicher;
    
    speicher = text;
    
    cout << hex <<speicher;
    
    return 0;
    }
    


  • @Char: Schau dir bitte nochmal die Grundlagen an bzw. fang an dir die Grundlagen anzuschauen. Kauf dir ein Buch oder lese dir ein Anfängertutorial durch. Eine mögliche Alternative zu deinem Code habe ich bereits in diesem Thread gepostet.



  • Jetzt geht das mit dem dummen hex ding nich 😡

    Ich hab schon ein Tutorial durchgearbeitet aber mit der Zeit Vergess ich immer son paar Sachen 😞



  • char schrieb:

    Jetzt geht das mit dem dummen hex ding nich 😡

    Das nennt sich Manipulator. Begrifflichkeiten sind auch wichtig beim Programmieren.

    char schrieb:

    Ich hab schon ein Tutorial durchgearbeitet aber mit der Zeit Vergess ich immer son paar Sachen 😞

    Was soll ich sagen...? Üben, üben, üben! 😉 Erst die praktische Anwendung lässt einen die vielen Dinge im Gedächtnis halten. Ein Riesen-Tutorial komplett durchzulesen, ohne zwischendurch immer wieder Sachen selbst auszuprobieren, bringt leider wenig. Da vergisst man wirklich die Hälfte...


Anmelden zum Antworten