char * an eine Funktion



  • Ich bekomme beim unteren Code einen Fehler, wie kann ich name1 auf name verweisen lassen?

    lg und vielen Dank für die Antworten,

    void Raum::setRaumName(char * name1)
    	{
    	memcpy(this->name, &name1, sizeof(name1)); // hier entsteht eín Fehler
    	}
    


  • Fehlt da nicht eine 1?

    memcpy(this->name,...  // hier fehlt soch die 1
    


  • PollerCPP schrieb:

    Ich bekomme beim unteren Code einen Fehler, wie kann ich name1 auf name verweisen lassen?

    lg und vielen Dank für die Antworten,

    void Raum::setRaumName(char * name1)
    	{
    	memcpy(this->name, &name1, sizeof(name1)); // hier entsteht eín Fehler
    	}
    
    void Raum::setRaumName(char * name1, size_t lenname1)
    	{
    	memcpy(this->name, name1, lenname1); // !
             }
    


  • Nö das geht nicht, da stürzt mir das Programm ab,
    keine Ahnung wieso;



  • PollerCPP schrieb:

    Nö das geht nicht, da stürzt mir das Programm ab,
    keine Ahnung wieso;

    Vielleicht zeigt der Zeiger auf die Speicheradresse 0? Was für eine IDE benutzt du und hast du dir schonmal den Debugger angeschaut? 🙂



  • Und wieso überhaupt immer wieder char*? Wenn es keinen guten Grund dagegen gibt, würde ich *immer* std::string bevorzugen.



  • PollerCPP schrieb:

    Nö das geht nicht, da stürzt mir das Programm ab,
    keine Ahnung wieso;

    Auch wenn das sehr trivial aussieht und Du, wie The-Kenny schon angemerkt hat, lieber std::string/std::wstring verwenden solltest, sollte Dir Dein Debugger auch ein bisschen Licht hinter das 'keine Ahnung wieso' bringen 😉 .



  • PollerCPP schrieb:

    ...

    void Raum::setRaumName(char * name1)
    	{
    	memcpy(this->name, &name1, sizeof(name1)); // hier entsteht eín Fehler
    	}
    

    Ganz einfach:

    void Raum::setRaumName(string name1) {
       name = name1;
    }
    

    Gruß

    Simon2.



  • Pff ... also das geht auch damit 😛 Musst nur gucken, das auch this->name groß genug ist:

    #include <cstring>
    
    class Room
    {
        char* m_name;
    public: 
        Room(const char* name) 
            : m_name(new char[std::strlen(name) + 1])
        { std::strcpy(m_name, name); }
        ~Room() { delete [] m_name; }
    };
    

    fertig ^^ Einfacher geht es aber mit std::string ...

    #include <string>
    
    class Room
    {
        std::string m_name;
    public:
        Room(std::string const& name) : m_name(name) {}
    };
    

    und fertig 🙂

    Aja dein std::memcpy-Aufruf sollte eher so aussehen:

    std::memcpy(this->name, name1, std::strlen(name1) * sizeof(char));
    

    wobei sizeof(char) in dem Fall weggelassen werden kann, da das 1 ist.
    Header ist übrigens <cstring>


Anmelden zum Antworten