[QUOTE=fredyxx;639092]strings jeder Art sind grundsätzlich arrays, an jeder Stelle steht ein einzelner Buchstabe.
Buchstaben sind meist Bytes (unsigned char), bei Arduino seltsamerweise signed char (auf anderen Systemen oder als Steuerzeichen auch teilw. int, führt hier aber zu weit ).
Die Nummerierung startet in C mit der Null, daher ist array[0] die erste "Zelle", array[1] die 2., usw., bei einem string oder array der Länge n ist also array[n-1] der letzte Buchstabe, der direkt zum string gehört.
Es folgen dann bei C-strings noch das terminierende Byte 0 ( '\0'), und ggf voher noch das "Enter-Zeichen" (carriage-return, line-feed), wenn du nach deiner string-Eingabe am Schluss die Enter-Taste gedrückt hast, in C auf AVR und ARM und Linux ist das das '\n' (alles andere führt hier zu weit).
\0 ist der ASCII-Wert 0, nicht das Zahlsymbol 0,
\n ist der ASCII-Wert 10.
Für dich ist vor allem wichtig, dass wenn du nur 1 Zeichen per Serial eingibst und mit ENTER abschließt, dieses Zeichen an der 1. Array-Stelle gespeichert wird, also array[0], und dass aber noch weitere Steuerzeichen folgen können, die das System drangehängt hat.
(edited: )
Leider kann man sich aber (wie erwähnt) bei Arduino nie recht drauf verlassen, was das alles genau ist. Wenn du also ein 'j' eingibst + ENTER, kann dein String-array so aussehen
j \0
-oder-
j \n \0
-oder (passiert, wenn man lange genug wartet bevor man dann irgendwann ENTER drückt), auch nur:-
j
- IMMER aber steht das j an 1. Stelle, also in der Zelle array[0].
ANSI C- oder C++ -Funktionen entfernen oder verarbeiten die string-Steuerzeichen mit ihren recht gut dokumentierten Standard-Funktionen, Arduino verwendet dazu die seltsam-verqueren und nicht bis maximal hundsmiserabel dokumentierten String-Class Funktionen wie trim().
Lesezeichen