LeRoi:
Das weiß ich, habe schon einiges mit C Strings gemacht bin aber durch Java etwas gemütlich geworden (da nutze ich aber StringBuilder zum zusammenfügen).
Und Java nutzt Du auf Geräten von mindestens dem Typ Smartphone mit 256 MB RAM oder mehr, also mindestens ca. ca. hundertachtundzwanzigtausend mal so viel RAM wie ein UNO hat. Gar nicht zu reden von PCs mit Gigabytes an RAM, also x-millionenfachem an RAM wie ein UNO board.
LeRoi:
Deshalb war mir die String Klasse von Arduino willkommen. Jetzt werd ich wohl aber wieder mit den C String Befehlen arbeiten, die ich ja auch schon teilweise verwendet habe zum Zerlegen oder Umwandeln. Meine Frage war ja nur, ob dieser Array-Speicherbereich dann sauber immer wieder verwendet wird, wenn ich die chars da durch die C String Befehle reinpacke (die machen ja alles byte-weise). Ich werd mal alles mit einem Char Buffer umbauen.
Erstmal musst Du Dich von dem Gedanken frei machen "alle ankommenden Zeichen in eine Variable" packen zu wollen. Bei extrem wenig RAM brauchst Du ganz andere Programmiertechniken.
Mit C-Strings definierst Du Dir Deine Zeichenkettenpuffer üblicherweise einmalig und global in der maximal benötigten Größe (bei einem GPS-Programm, das Zeichen per NMEA-Datenzeilen empängt oder einem seriellen Kommandointerpreter beispielsweise für einen String mit maximal 80 Zeichen (eine Zeile) und dieser eine Zeichenpuffer kann in Programm immer wiederverwendet werden. Allenfalls legst Du kleine Zeichenkettenvariablen noch dynamisch auf dem Stack an, indem Du sie als lokale Variable innerhalb einer Funktion anlegst, z.B.
void printFormattedTime (int hour, int minute, int second)
{
char timeStr[9];
snprintf(timeStr, sizeof(timeStr), "%02d:%02d:%02d", hour,minute,second)
Serial.println(timeStr);
} // hier ist zur Laufzeit die Funktion und damit die Gültigkeit der Variablen timeStr beendet, und die auf dem Strack zu Funktionsbeginn reservierten 9 Bytes werden vollständig und ohne irgendwelche Fragmentierung wieder dem Stack zugeschlagen, bis zum nächsten Funktionsaufruf einer Funktion.
Wenn Du extrem wenig RAM hast, darfst Du nicht "alles", sondern nur das "absolut notwendige" gleichzeitig im RAM halten. So gesehen ist schon mein Funktionsbeispiel völlig überzogen im RAM-Verbrau ch, weil man dasselbe mit etwas anderen Befehlen auch ohne diesen 9-Zeichen-Ausgabepuffer erreichen könnte. Wobei allerdings meistens gilt: Um mehr RAM zu sparen, mußt Du auch mehr zusätzlichen Programmcode schreiben, d.h. die Größe des C-Codes in der INO-Datei wird unter ungünstigenUmständen größer als bei Anwendung von Programmiertechniken, mit denen RAM verschwendet wird.