AVRli schrieb:
> Nur wann castet man nun???
Wenn absolut gar nicht anders geht.
Casts sind Waffen und dementsprechend spärlich und überlegt sollte man
sie auch einsetzen.
> Was ist das "casten"?
Wenn man dem Compiler ein X für ein U vormachen will (hier in diesem
speziellen Fall des Umcastens eines Pointers).
An dieser Stelle bedeutet der Cast:
"Lieber Compiler. Wir tun jetzt einfach mal so, als ob dort im Speicher
das und das liegen würde. Ja, ich weiß, das es das nicht tut, aber tun
wir halt einfach mal so. Also halt die Klappe und mach es einfach!"
Aber, wie es halt manschmal so ist, ein Esel wird nicht deswegen zum
Pferd, weil man ihn Pferd nennt.
Du solltest dir das wilde Mischen von
uint8_t
int8_t
char
abgewöhnen. Auch wenn alle 3 Datentypen letztendlich in einem Byte im
Speicher münden, so sind sie doch verschiedene Dinge. Die einen sind mit
Vorzeichen, die anderen ohne. Ob ein char ein Vorzeichen hat oder nicht,
entscheidet eine Einstellung im Compiler. Es ist daher vernünftig,
diesen Datentyp auch extra zu sehen
char für alles was Stringverarbeitung bedeutet. Also
überall wo es um Texte geht
int8_t ein kleiner Integer mit Vorzeichen (also zum rechnen!)
uint8_t ein kleiner Integer ohne Vorzeichen
auch zum rechnen, aber diesmal ohne Vorzeichen.
Vulgo: Ein Byte
verwende die Datentypen in diesem Sinne und du wirst weniger Ärger
haben.
Deine Funktion chk_eep_str behauptet von sich, dass sie überprüft ob im
Speicher ein String liegt. Ergo - Textverarbeitung. Also ist der
angemessene Datentyp dafür ein
uint8_t chk_eep_str(const char *eepstr)
{
...
}