- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 52

Thema: Char - Array und Pointer

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Anzeige

    Powerstation Test
    Interessant: Arduino-IDE kennt printf()

    Ich frage mich nur, wo geht die Ausgabe dann hin? Geht die nicht normal auf einen Standardstream oder verwechsel ich da was.
    Wenn der nämlich printf kennt, könnte ich auch viele Beispiele aus meinem C-Buch verwenden/nachvollziehen.



    MfG

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    ....wobei hinzukommt, dass (groß geschrieben)
    String
    eine spezielle Arduino-Klasse ist, die C++ "benutzt",

    hingegen (klein geschrieben)
    string
    eine allgemeine C++ std Klasse ist, genau: std::string
    Danke für den Hinweis, ist mir irgendwie garnicht aufgefallen, weil ich strings gerne meide :P
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #13
    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 13:02 Uhr)

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    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.

  5. #15
    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.

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    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.

  7. #17
    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.

  8. #18
    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 21:57 Uhr) Grund: typo

  9. #19
    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

  10. #20
    HaWe
    Gast
    nein, strtok ermittelt eine gefundene Speicheradresse eines cstrings (edit: ) vor/bis zur ersten angegebenen delimiter-Bruchstelle,
    und der Ausgangs-cstring wird entsprechend heruntergekürzt (der Rest-cstring hinter dem 1. delimiter):

    char * strtok ( char * str, const char * delimiters );

    Parameters

    str
    C string to truncate.
    Notice that this string is modified by being broken into smaller strings (tokens).
    Alternativelly, a null pointer may be specified, in which case the function continues scanning where a previous successful call to the function ended.
    delimiters
    C string containing the delimiter characters.
    These can be different from one call to another.


    Return Value
    If a token is found, a pointer to the beginning of the token.
    Otherwise, a null pointer.
    A null pointer is always returned when the end of the string (i.e., a null character) is reached in the string being scanned.
    ersetze mal im Beispiel printf durch Serial.println und main() durch void setup() und du wirst sehen, was passiert:

    Example
    http://www.cplusplus.com/reference/cstring/strtok/

    Code:
    /* strtok example */
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] ="- This, a sample string.";
      char * pch;
      printf ("Splitting string "%s" into tokens:\n",str);
      pch = strtok (str," ,.-");
      while (pch != NULL)
      {
        printf ("%s\n",pch);
        pch = strtok (NULL, " ,.-");
      }
      return 0;
    }


    Output:

    Code:
    Splitting string "- This, a sample string." into tokens:
    This
    a
    sample
    string
    Geändert von HaWe (28.10.2019 um 17:02 Uhr)

Seite 2 von 6 ErsteErste 1234 ... 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
  •  

Solar Speicher und Akkus Tests