pointer auf Struct daten für struct string übergeben



  • Hallo zusammen, ich ärger mich grade ein wenig mit zeigern herum.

    ich habe ein struct möchte darauf einen pointer setzen
    und über diesen pointer ein array im struct füllen.

    #include <iostream>
    using namespace std;
    
    struct Test
    {
         char bla[30];
    
    };
    
    int main(){
    
    //version ohne pointer
     Test y;
     strcpy(y.bla,"text");
    
    //version mit pointer
     // wie aber geht es mit einem pointer auf das struct ?
     Test * x;
    
     //meine idee war
       char meintext[] = "blub";
    //  strcpy(x->bla,meintext);
    
    }
    

    Hat jemand eine idee, bzw kann mir sagen worin der fehler liegt ?



  • tallan schrieb:

    Hat jemand eine idee, bzw kann mir sagen worin der fehler liegt ?

    Da fallen mir verschiedene Antworten drauf ein:

    Antwort a): Dein Fehler ist, dass du uns nicht sagst was an deinem COde nicht funktioniert. Gibt der Compiler Fehlermeldungen aus oder was?

    Antwort b): Der Fehler ist, dass du das strcpy auskommentiert hast. So kann auch kein "blub" in x->bla geschrieben werden.

    Antwort c): Der Fehler ist, dass du C-Strings (char-Arrays) und C-Funktionen (strcpy) verwendest statt einfach C++-Strings (std::string) zu verwenden.



  • Vielleicht einfacher wenn man es in C++ implementiert.

    #include <iostream>
    
    struct Test {
         std::string bla;
    };
    
    int main() {
        Test a;
        a.bla = "Text";
        Test* b = new Test;
        b->bla = "Text";
        delete b;
        return 0;
    }
    

    Gut Schuß
    VuuRWerK 😉



  • pumuckl schrieb:

    tallan schrieb:

    Hat jemand eine idee, bzw kann mir sagen worin der fehler liegt ?

    Da fallen mir verschiedene Antworten drauf ein:

    Antwort a): Dein Fehler ist, dass du uns nicht sagst was an deinem COde nicht funktioniert. Gibt der Compiler Fehlermeldungen aus oder was?

    Antwort b): Der Fehler ist, dass du das strcpy auskommentiert hast. So kann auch kein "blub" in x->bla geschrieben werden.

    Antwort c): Der Fehler ist, dass du C-Strings (char-Arrays) und C-Funktionen (strcpy) verwendest statt einfach C++-Strings (std::string) zu verwenden.

    a) es wird eine acces exception beim starten des programms ausgeworfen
    b) wegen dem fehler ist es auskommentiert
    c)ich weiss das es anders /besser /einfacher geht wollte aber eben den umgang mit zeigern etwas üben



  • Wohin zeigt denn x nach

    Test * x;
    

    ?



  • Tachyon schrieb:

    Wohin zeigt denn x nach

    Test * x;
    

    ?

    hm ja habs verstanden, also mit x = new Test(); geht es demzufolge lag mein fehler daran das das feld bei Test y; alokiert wird und bei Test * x nicht ?



  • tallan schrieb:

    hm ja habs verstanden, also mit x = new Test(); geht es demzufolge lag mein fehler daran das das feld bei Test y; alokiert wird und bei Test * x nicht ?

    1. Denk aber daran das etwas, das mit new alloziert wird, auch mit delete freigegeben werden sollte.

    2. Ein Zeiger, dem du keinen Wert zuweist, reserviert auch nur für den Zeiger Platz. Und nicht nur das: Wenn du Pech hast, wird irgendwas im Zeiger stehen - und wenn du darauf zugreifst ist es undefiniert was passiert...

    cu André



  • tallan schrieb:

    hm ja habs verstanden, also mit x = new Test(); geht es demzufolge lag mein fehler daran das das feld bei Test y; alokiert wird und bei Test * x nicht ?

    Stimmt. Das ist der Vorteil bei automatischen Variablen - sie sind automatisch 😉 D.h. der Speicher wird automatisch auf dem Stack bereitgestellt und initialisiert, bei Zeigern musst du ihn erst explizit per new anfordern.


Anmelden zum Antworten