- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 52

Thema: Char - Array und Pointer

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    printf verschwindet bei Arduino-AVR (und vermutlich auch bei ARM Cortex) Boards im Nirwana, denn dort existiert auch kein stdout.
    esp hat da sicher andere Einstellungen, denn hier gibt es auch ein stdio.h (edit: dennoch fraglich, ob auch vollständig wie bei Posix) und hier wird stdout in die Serial Konsole umgeleitet (IIRC).
    Man kann allerdings sprintf() mit Serial.print verwenden (akzeptiert String und cstring), muss aber bei der sprintf-Float-Formatierung ("%f") bei AVR boards aufpassen ("%f" funktioniert aber bei ARM Cortex und bei esp)

    std::string gibt es auch nicht bei Arduino, außer ggf. bei esp (freeRTOS <string> IIRC).
    aber man benutzt ja meist als Arduino-User das abgespeckte/veränderte String.
    Wenn du, Moppi, allerdings von Arduino IDE/API weg willst, gibt es ntl auch kein String mehr.
    Geändert von HaWe (28.10.2019 um 12:02 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    gibts dann auch kein
    http://www.cplusplus.com/reference/memory/auto_ptr/

    in arduino?! halte ich jetzt schon für etwas krass, hätte geadcht das arduino eigentlich die volle c++ unterstützung mitbringt O_o

    PS: scheint als ob auto_ptr teil von std geworden ist ... wie die zeiten sich ändern
    PPS: in c11 sogar deprecated da heißt es http://www.cplusplus.com/reference/memory/unique_ptr/

    ich habe gerade gänsehaut dass mich das zeug bald einholen wird Q_Q
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    HaWe
    Gast
    nein, Arduino bringt nirgends die komplette C++14 std lib oder C99 mit Posix-Definitionen mit, wegen dem micktigen RAM bei AVRs. Bei ARM Cortex wird es sukzessive besser.
    esp aber hat Erweiterungen, z.B. auch pthread und std::thread.

    schreib doch mal ein kleines Programm mit auto_ptr, ich teste es mal.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    weist du wie lang es her ist dass ich c++ syntax in meinem gedächtnis gegen python eingetauscht habe? XD ich bekomm ja nichtmal mehr ein schulbeispiel zusammen ohne googeln :P
    ich wünschte ich könnte mich noch an die korrekte syntax erinnern eine klasse zu definieren in c++

    ich preogrammiere auch mittlerweilen fast ausschließtlich in reinem C auf µControllern, weil alles andere am RAM scheitert (malloc calloc und co. sind auch tabu)
    oder micropython wenns ein ARM >512k flash ist, weils einfach so urig einfach und bequem ist
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    HaWe
    Gast
    das wiederum ist der Vorteil vom Arduino API, das ein abgespecktes C++14 benutzt, angepasst auf AVR, Intel Galileo, ARM Cortex M0, M3, M4 und ESP 8266/32
    Ich wüsste aber auch keinen Vorteil, den auto_ptr für Arduino User bieten sollte. Ich habe es mit dem testen ja auch nur angeboten, weil du selber auto_ptr vorgeschlagen hattest.

  6. #6
    HaWe
    Gast
    zurück zum TOP:
    char** myarray;
    Bekomme ich hier ein Array mit reserviertem Speicherplatz für 128 Pointer (char*)?
    nein, reservierten Speicherbereich hast du nicht, du musst dafür jeden der 128 char arrays bei der Deklaration mit festen cstrings vor-belegen
    char** myarray = {"dies ist der 1. cstring","dies ist der 2. cstring","dies ist der 3. cstring","dies ist der 4. cstring",...}
    - sonst schreibst du wild ins RAM hinein.
    char** myArray ist ja nur eine Anfangs-Adresse für eine beliebige Liste unbekannter Länge mit 1 Pointer auf eine (einzelne) char-Speicheradresse,
    und
    char* myArray[128] ist nur eine Anfangs-Adresse für eine 128er Liste mit je 1 Pointer auf eine (einzelne) char-Speicherzelle

    Den reservierten Speicher hast du nur mit
    char myArray[128][100]; // 128 x char array zu je 100 char Länge

    wenn du dies an eine Funktion übergeben musst, die nur char* oder char** akzeptiert, kannst du type-casten

    (char**)myarray // wandelt myarray[][] vorrübergehend in char** myarray um
    (char*)myarray[] // wandelt myarray[][] vorrübergehend in char* myarray[] um


    du kannst auch einen 2-dim array definieren (zur variablen Belegung mit cstrings) und einen pointer auf ein solches Konstrukt:

    char myArray[128][100]; // 128 x char array zu je 100 char Länge
    char **ppArr;

    dann kannst du auch die Speicheradressen einander zuweisen:
    ppArr= (char**)myArray;
    und dann ppArr an deine Funktion als Parameter übergeben.
    Geändert von HaWe (28.10.2019 um 20:57 Uhr) Grund: typo

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Danke für Deine Ausführungen!

    Das war das, was ich machen wollte. Inzwischen bin aber unsicher, ob ich damit besser gestellt bin.

    strtok() gibt nur Zeiger zurück. Dann müsste ich die Zeichenketten erst ins Array kopieren, um sie später auszuwerten. So weit ich gesehen habe, kann ich die aber auch genügend über div. Funktionen und Pointer auswerten.

    Denke ich so richtig?

    Wobei ich mich noch frage, was strtok() genau macht. Ich bekomme dort verschiedene Zeiger auf die Teilzeichenketten zurück. Erstellt strtok() jetzt selber schon ein Array mit den Zeichenketten, zu denen ich nur die Pointer bekomme?
    Bei dieser Funktionalität steige ich noch nicht richtig durch.



    MfG

Ä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, 16:01
  2. Char mit array verbinden ?
    Von AsuroPhilip im Forum Software, Algorithmen und KI
    Antworten: 22
    Letzter Beitrag: 08.09.2011, 13: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, 16:53
  4. zweidemensionales char-array
    Von p_mork im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 15.03.2007, 16:54
  5. Cstring einem char array zuweisen
    Von ceekay im Forum Software, Algorithmen und KI
    Antworten: 8
    Letzter Beitrag: 17.04.2006, 10:20

Berechtigungen

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

Solar Speicher und Akkus Tests