Anfängerproblem: Umgang mit Strings (String vs. String[50]) / return aus Funktion
-
Wenn Du einen
std::string
namensfoo
hast kannst Du die Methodefoo.c_str()
benutzen um davon einchar const[]
, also ein Array aus konstantenchar
s zu bekommen.
-
@zeropage sagte in Anfängerproblem: Umgang mit Strings (String vs. String[50]) / return aus Funktion:
PS:
String
mit großem S ist wohl eine eigene Arduino IDE Klasse, die man aber tunlichst nicht nutzen sollte.Die Arduino-Umgebung ist auch für kleine Mikrocontroller ((sehr) wenig RAM und ROM)
Darum gibt es dort die etwas sparsamere String-Klasse.Dieser String kann mehr als ein C-String (char Array) aber auch weniger als std::string.
Man kann Teilstrings auch einzeln ausgeben/übertragen.
Mitprint("Hallo"); print(" Welt!\n");
komt auch Hallo Welt! raus.
PS: Die Methoden der String-Klasse: https://www.arduino.cc/reference/de/language/variables/data-types/stringobject/
-
@N00bzilla sagte in Anfängerproblem: Umgang mit Strings (String vs. String[50]) / return aus Funktion:
Zwischenstand: Der Ansatz von @Swordfish kompiliert zumindest (das ist gut),
Der Ansatz funktioniert genauso mit String.
Das ist wohl nicht unbedingt die einsteigerfreundlichste Ecke aus dem C++-Universum, in der ich da gelandet bin...
Eine sehr komplexe Sprache (C++) auf einem eingeschränktem System (Mikrocontroller) muss Abstriche machen.
Du sollst dort auch nicht C++ nutzen (kannst es aber)Das System ist einsteigerfreundlich, darum versteckt es jede Menge vor dir.
Du must ja nur setup() und loop() programmieren. Wie die aufgerufen werden und was außerhalb von loop() passiert weißt du nicht.Und mit dem String[50] hast du irgendwie noch C mit rein gebracht.
-
@DirkB Danke auch Dir für Deinen Beitrag.
@ alle
Heute habe ich mich mal wieder rangesetzt, und inzwischen verhält sich die IDE komplett anders. Ich habe wieder alles auf Standard-String zurückgerüstet, und auf einmal läuft der Code, der bislang nur Abstürze verursacht hat.
Das ist offensichtlich eine Komponente, die man ebenfalls berücksichtigen muss in dieser, wie Dirk richtig schreibt, hardwareseitig sehr eingeschränkten Welt. Jetzt komme ich also weiter...Lösung: IDE neu starten
Hilfreiche Doku: Die Methoden der String-Klasse: ttps://www.arduino.cc/reference/de/language/variables/data-types/stringobject/
-
Folgende Lösung habe ich noch gefunden, um Daten aus einem String-Array in einen String zu bekommen.
Im Array (hier gstrCode) ist jeweils nur ein Zeichen gespeichert (adressiert über die 0).
Zusammenfassen in einen String dann wie folgt:gstrNachrichtKomplett = gstrNachrichtKomplett + gstrCode[intSum].charAt(0);
-
@N00bzilla Warum wird da ein String-Array benutzt?
-
@DirkB Die Antwort findest Du im Ausgangspost:
"Zuvor hatte ich versucht, den Ergebnisstring ausgehend von einer leeren Hülle Zeichen um Zeichen durch Konkatenieren (+) aufzubauen, das hat aber auch nicht geklappt, darum habe ich die Variante gewählt, in der ich jedes Zeichen einzeln adressieren kann. Jetzt bekomme ich zwar mein Ergebnis aufgebaut, kann es aber nicht zurückgeben."Das war zu dem Zeitpunkt die einzige Variante, die ich lauffähig bekommen habe. Vielleicht kann ich das redesignen, wenn ich etwas mehr Trittsicherheit erlangt habe, denn vermutlich wird aktuell unheimlich viel Speicher belegt für nichts. Aber das habe ich auch noch nicht durchdrungen, und Speicher ist im Moment noch kein Problem. Erstmal soll es funktionieren...
-
Dann solltest du uns den Code dazu zeigen - und genau schreiben, was nicht geklappt hat.
-
@N00bzilla Du meinst, ein String-Array sei die Lösung und versuchst jetzt Alles, das zum laufen zu bekommen.
Das String-Array ist aber schon der falsche Weg. (soweit die Salamischeiben das hergeben)
-
@DirkB Falsch wäre er, wenn er nicht funktionieren würde.
Aber er ist ganz sicher nicht elegant oder ressourcenschonend...@Th69 Was ich alles probiert habe, weiß ich nicht mehr, aber ich poste gerne das Ergebnis, wenn ich eine "schöne" Variante gefunden habe. Dann können die Cracks immer noch erklären, was man daran verbessern kann.