- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 23

Thema: class mit übergebenen array Größen erstellen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    shedepe
    Gast
    strcpy(list[i*MENULEN], buf);

    Warum mal *MENULEN?
    Du schreibst damit meilenweit aus deinem Array aus.
    strcpy(list[i], buf);

    Dein Array ist ja eigentlich eine Liste von char pointern.
    Für jeden char pointer allokierst du speicher. Und dann willst du den Speicher der von dem Char Pointer an der Stelle i allokiert wird mit Text beschreiben.

    Eine Sache außerdem noch: Du solltest aufpassen, dass dir nicht der Speicher ausgeht. Das sind dann nämlich wirklich komische Fehler und die sind in der Konstruktion nicht zur Compilezeit zu erkennen.

  2. #2
    HaWe
    Gast
    der array geht doch so:
    list[MENULEN][CAPTLEN],
    also muss ich doch alle Zellen von 0<i<MUNULEN mit den cstrinds beschreiben?
    ohne die i*MENULEN hat er aber denselben Fehler erzeugt - muss ich nochmal kontrollieren...

    ich habe den esp8266, der müsste zumindest jetzt noch genug Speicher für 1 solches Menü haben.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.674
    Blog-Einträge
    1
    Ich hab versucht, dem zu folgen. Habe aber den Eindruck, dass die Arrays nicht richtig gehandhabt werden. Was mir auch nicht ganz klar war: warum für einen Index der Datentyp "char" und nicht "int" verwendet wird.
    Deshalb habe ich einen Sketch erstellt, um auch ein Array zur Laufzeit zu erstellen.

    Code:
    int MENULEN=2;
    int CAPTLEN=32;
    char buf[]="Hallo";
    int i=2;
    int a=0;
    
    
    
    
    void setup() {
    
    
    Serial.begin(115200);
    delay(1000);
    
    
    
    
    
    
    }
    
    
    void loop() {
     char list[MENULEN][CAPTLEN];
     if(a==0){
     strcpy(list[i], buf);
     a++;
     }
    
    
     Serial.println(list[i]);
     delay(1000);
    }
    Zumindest so funktioniert es. Bloß ob das jetzt im Sinne des Erfinders (HaWe) war?

    MfG

  4. #4
    HaWe
    Gast
    update
    stimmt immer noch, gerade kontrolliert:
    selber runtime error auch für

    Code:
      
         void init() {
            for(int i=0; i<MENULEN; i++) {
               sprintf(buf,"%d line %d", i);
               strcpy(list[i], buf);  // editiert
            }
         }
    - - - Aktualisiert - - -

    Zähler ist ggf auch char, weil es nur von 0 bis 20 geht maximal

    - - - Aktualisiert - - -

    @moppi:
    ja, so mit der externen Funktion ging es bereits vorher.
    Das Problem ist ja gerade, es per OOP-Methode intern zu machen, genau solche r/w Zugriffe brauche ich später noch öfters .
    Geändert von HaWe (05.12.2018 um 22:19 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.674
    Blog-Einträge
    1
    Wie kommst Du auf einen Runtime Error?

    Hier mal die Ausgabe, die ich mit Deinem Code habe, das "Hallo" habe ich in loop() eingefügt, er schreibt es immer wieder hin, das Programm arbeitet also weiter:

    Code:
    Serial started
    5 newline_
    > newline_
    
    
    - 8245
    -⸮O⸮⸮
    
    
    -s⸮⸮
    
    
    -[⸮⸮
    
    
    -⸮⸮⸮
    
    
    -> newline_
    -⸮⸮*⸮
    
    
    -οy⸮
    
    
    -⸮⸮
    
    
    -⸮}⸮t
    
    
    Hallo
    Hallo
    Hallo
    Hallo

    Wenn ich die init() ändere:

    Code:
         void init() {
            for(int i=0; i<MENULEN; i++) {
               sprintf(buf,"%d line %d", i);
               strcpy(list[i], buf); //i*MENULEN
            }
    kommt das raus:

    Code:
    0 line 8245
    1 line 8245
    2 line 8245
    3 line 8245
    4 line 8245
    5 line 8245
    6 line 8245
    7 line 8245
    8 line 8245
    9 line 8245
    Jedenfalls kein Error und kein Abbruch bei mir.
    Geändert von Moppi (05.12.2018 um 22:07 Uhr)

  6. #6
    HaWe
    Gast
    manno, du hast Recht, danke!
    Vor lauter indices schwirrt mir schon der Schädel.
    Auch ich kriege jetzt

    0 line 126
    1 line 65280
    2 line 65280
    3 line 65280
    4 line 65280
    5 line 65280
    6 line 65280
    7 line 65280
    8 line 65280
    9 line 65280

    und es muss ntl heißen
    sprintf(buf,"%d line %d", i, i);

    dann steht da auch
    0 line 0
    1 line 1
    2 line 2
    3 line 3
    4 line 4
    5 line 5
    6 line 6
    7 line 7
    8 line 8
    9 line 9


    vielen Dank nochmal!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.674
    Blog-Einträge
    1
    Dennoch verstehe ich nicht, wie es zum Runtime Error kam? - Du hast es doch in den Code rein geschrieben? Oder war das nur, um etwas Verwirrung zu stiften?

    Davon abgesehen, shedepe hatte schon was von falschen Variablen in der Schleife geschrieben und mir war das auch aufgefallen, dass die Handhabung der Arrays irgendwie etwas konfus war. Hatte ja Gestern, 20.40 Uhr geschrieben: "Habe aber den Eindruck, dass die Arrays nicht richtig gehandhabt werden." Das hast Du dann wohl irgendwie übersehen ...

    MfG
    Geändert von Moppi (06.12.2018 um 05:37 Uhr)

  8. #8
    HaWe
    Gast
    es war ein copy- und paste-Error.
    In dem kopierten neuen Code stand zuerst
    strcpy(list[i*CAPSLEN], buf);
    und auch mal
    strcpy(list[i*MENULEN], buf);

    aber dann statt
    strcpy(list[i], buf);

    fälschlicherweise dann durch falsches copy+paste und falsches heraus-löschen
    strcpy(list[MENULEN], buf);
    und hier beim letzten gabs NATÜRLICH wieder einen Fehler

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.674
    Blog-Einträge
    1
    Ach Du liebe Zeit, oh oh oh

    Hauptsache es funktioniert mal jetzt.

    Aber das sind eben so Sachen, die man immer im Kopf haben muss: habe ich die Funktion richtig angewendet, sind Parameter richtig übergeben, Variablen entsprechend deklariert und sind die auch definiert, sehe ich Schreibfehler im Code.

    MfG
    Geändert von Moppi (06.12.2018 um 09:36 Uhr) Grund: Hinweise

Ähnliche Themen

  1. Change member of a class from another class
    Von iciwi im Forum Arduino -Plattform
    Antworten: 1
    Letzter Beitrag: 27.08.2016, 09:45
  2. neues Byte aus Byte-Array erstellen
    Von BoondockDuck im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 06.09.2008, 07:53
  3. Bits in sämtlichen Größen :)
    Von squelver im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 0
    Letzter Beitrag: 22.11.2007, 12:02
  4. SMD-Größen für SMD-Anfänger
    Von jeybo im Forum Elektronik
    Antworten: 22
    Letzter Beitrag: 29.08.2006, 07:04
  5. Eagle - Größen
    Von BlackDevil im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 9
    Letzter Beitrag: 27.03.2006, 22:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests