-         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 52

Thema: Char - Array und Pointer

  1. #21
    Erfahrener Benutzer Roboter Genie Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.377
    Blog-Einträge
    7
    Anzeige

    Ich habe jetzt folgendes ausprobiert:

    Das ursprüngliche Char-Array mit strtok() bearbeitet.
    Die zurückgegebenen Pointer gespeichert.
    Das ursprüngliche Char-Array mit einem andern String überschrieben und die gespeicherten Pointer von strtok() zur Ausgabe verwendet.

    Jetzt stellt sich das so dar:

    Es wird kein zusätzlicher Speicher durch strtok() reserviert, um die Teilzeichenketten woanders zu speichern.
    strtok() fügt an den Trennzeichen der Tokens offenbar ein Endezeichen (0) ein, also werden dann die Trennzeichen überschrieben mit 0. Der ursprüngliche Inhalt des Char-Array wird also überschrieben.
    Wenn nun mittels Serial.println(xxx[index]); die Teilzeichenketten ausgegeben werden, funktioniert das mit dem ursprüngliche Char-Array, bearbeitet von strtok(), wie erwartet.
    Wenn das Char-Array überschrieben wurde, werden trotzdem (aufgrund der Pointer in das Array) Teilzeichenketten ausgegeben und zwar jeweils von der Position, die durch den Pointer im Array bestimmt ist, bis zum Ende des Char-Arrays (bzw. bis ein Endezeichen - vermutlich 0 - auftritt).

    Die Pointer von strtok() zeigen in das Char-Array, das von strtok() bearbeitet wurde.
    Ist daher mit den Zeigern eine sparsame Methode und durchaus nicht unpraktisch, solange das Char-Array nicht erneut überschrieben wird, bevor die Tokens alle verarbeitet sind. Was ansich auch eine Falle beim Programmieren sein und zu unerwarteten Ergebnissen führen kann.
    Geändert von Moppi (28.10.2019 um 17:18 Uhr)

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.840
    ja, ganz genau, genau das meinte ich oben mit "ermittelt eine Speicheradresse" und "kürzt den rest-cstring herunter" (der cstring-Anfangspointer wird einfach ein Stück erhöht).
    willst du die tokens zwischenspeichern, kannst du sie auf andere char* Variaben übertragen oder per strcpy/strncpy in char[] hineinkopieren.
    Willst du den Ausgangs-cstring behalten, musst du ihn ebenfalls zwischenspeichern.
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  3. #23
    Erfahrener Benutzer Roboter Genie Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.377
    Blog-Einträge
    7
    Ja, so siehts aus.

    Danke Dir!

    - - - Aktualisiert - - -

    Daher muss ich aber die Pointer auch nicht speichern, das ist unnütz. Wenn, müsste ich die Teilzeichenketten speichern, wie Du beschrieben hast .
    Ich muss für jede weitere Teilzeichenkette einfach strtok() erneut aufrufen und bekomme den nächsten Zeiger.

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    35
    Beiträge
    3.411
    Ich wüsste aber auch keinen Vorteil, den auto_ptr für Arduino User bieten sollte
    du musst nicht selber new und delete auf den Objekten machen die du auf dessen Basis erstellst und er trackt für dich die Zugriffe wenn cih den unique_ptr richtig verstanden habe. Das Problem bei Objektorientiertem C++ mit New ist, dass du selber sicherstellen musstd ass du jedes Objekt sauber löschst bevor du die referenz darauf freigibst und der unique_ptr macht das alles für dich wenn du z.B. ein array von "MyString : std::unique_ptr" erstellst.

    Gerade weil ohne tieferes Wissen da viel Potential für crash drin steckt, vor allem auf einem uC

    da ist jedes "Sandardmittel" recht ... wenns denn drin wäre :P
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #25
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.840
    jaaaa - das wäre tatsächlich ein Vorteil!

    @moppi: ich meinte mit Teilzeichenketten die tokens, und das sind ja Pointer auf char
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  6. #26
    Erfahrener Benutzer Roboter Genie Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.377
    Blog-Einträge
    7
    ich meinte mit Teilzeichenketten die tokens
    Das hoffe ich! Nur Tokens ist mir zu english. Deutsch kennt Worte, die einen Sachverhalt besser/präziser beschreiben können. Ich bleibe deshalb eigentlich lieber bei Deutsch.


  7. #27
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.840
    stimmt
    aber wegen der tokens heißt die Funktion ja nun auch strtok
    Teilzeichenketten konnte man offenbar auch missverstehen als Rest-Strings
    Aber gut, das wir jetzt wissen was wir meinen und meinen was wir wissen
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  8. #28
    Erfahrener Benutzer Roboter Genie Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.377
    Blog-Einträge
    7
    Ich Suche noch einen Link zu: Wie erweitere ich zur Laufzeit ein Objekt/Klasse um Eigenschaften?
    In meinem Buch kommt OOP leider nicht vor.
    Alles sonst habe ich so weit gefunden, was man im Quelltext (Klasse) anlegt, einbindet.
    Suche noch eine Beschreibung, wie man eben, wenn das Programm läuft, einer Klasse oder Struktur eine Eigenschaft (also z.B. einen Wert oder Zeichenkette mit Bezeichner) hinzufügt.
    Ich bezweifle, das sowas wie: meinObjekt.Name2 = "Müller"; einfach so funktionieren wird, wenn Name2 nicht schon in meinObjekt existiert hat.
    Aber vielleicht funktionbiert es ja auch mit: meinObjekt.Name2 = new String("Müller"); ???


    MfG

  9. #29
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    4.840
    Ich Suche noch einen Link zu: Wie erweitere ich zur Laufzeit ein Objekt/Klasse um Eigenschaften?
    In meinem Buch kommt OOP leider nicht vor.
    Alles sonst habe ich so weit gefunden, was man im Quelltext (Klasse) anlegt, einbindet.
    Suche noch eine Beschreibung, wie man eben, wenn das Programm läuft, einer Klasse oder Struktur eine Eigenschaft (also z.B. einen Wert oder Zeichenkette mit Bezeichner) hinzufügt.
    Ich bezweifle, das sowas wie: meinObjekt.Name2 = "Müller"; einfach so funktionieren wird, wenn Name2 nicht schon in meinObjekt existiert hat.
    Aber vielleicht funktionbiert es ja auch mit: meinObjekt.Name2 = new String("Müller"); ???
    erweitern von Klassen durch weitere Variablen oder Methoden zur Laufzeit ist meines Wissens nicht möglich.
    Diese müssen schon bei der Deklaration fest stehen, genau wie man keine zusätzlichen Zeilen zur Laufzeit in eine Funktion schreiben kann, keine array-Größen erhöhen/verlängern kann und keine zusätzlichen undeklarierten Variablen nachträglich zur Laufzeit einfügen kann, weder global noch lokal in Funktionen oder Strukturen.

    Stelle dir ein Objekt vereinfacht als C-Struktur vor, nur sind jetzt zusätzlich zu Variablen jetzt auch noch Funktionen enthalten.

    meinObjekt.Name2 = "Müller";

    geht also nur, wenn ein Objekt
    class foo{}
    bereits per Deklaration eine Variable enthält
    public:
    String Name2 ;

    dann geht nach Instanziierung per
    foo meinObjekt;
    meinObjekt.Name2 = "Müller";


    PS:
    es ist analog zu Strukturen:
    Code:
    typedef struct 
    {
        String Name1, Name2;
    } foo;
    
    foo meineStruct;
    meineStruct.Name2= "Müller";
    auch hier kann man zur Laufzeit keiner Variablen Name3 etwas zuweisen.
    Geändert von HaWe (28.10.2019 um 22:02 Uhr)
    ·±≠≡≈³αγελΔΣΩ∞ Schachroboter:www.youtube.com/watch?v=Cv-yzuebC7E Rasenmäher-Robot:www.youtube.com/watch?v=z7mqnaU_9A8

  10. #30
    Erfahrener Benutzer Roboter Genie Avatar von Moppi
    Registriert seit
    18.03.2018
    Beiträge
    1.377
    Blog-Einträge
    7
    Ich nenne mal als Beispiel JavaScript. Hier ein Link dazu: https://developer.mozilla.org/de/doc...ekten_arbeiten
    Das was dort beim Erstellen von Objekten aufgezeigt ist, geschieht zur Laufzeit. Es können auch stets neue Eigenschaften, die im Quellscript noch nicht enthalten sind, später hinzugefügt werden. So weit ich etwa weiß, geht das auch mit JSON. Dass man Objekte importieren kann. Objekte, die während der Erstellung des Quelltextes gar nicht bekannt sind, werden zur Laufzeit erstellt.




    MfG

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Ähnliche Themen

  1. Pointer auf Struct von Byte-Array
    Von Bumbum im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 31.05.2013, 17:01
  2. Char mit array verbinden ?
    Von AsuroPhilip im Forum Software, Algorithmen und KI
    Antworten: 22
    Letzter Beitrag: 08.09.2011, 14:37
  3. gelöst : Frage zu C und 2 Dim char Array
    Von jar im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 29.05.2007, 17:53
  4. zweidemensionales char-array
    Von p_mork im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 15.03.2007, 17:54
  5. Cstring einem char array zuweisen
    Von ceekay im Forum Software, Algorithmen und KI
    Antworten: 8
    Letzter Beitrag: 17.04.2006, 11:20

Berechtigungen

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