Hallo,
ich bin mal wieder am Programmcode kürzen und habe dazu eine vermutlich simple Frage:
Doch zunächst die 2 Programmzeilchen:
const char Password[] = "Hello";
#define PASSWORD_LEN sizeof(Password)-1
Meine Frage dazu:
Hängt ein C-Compiler IMMER eine 0x00 (Stringterminator) bei obiger Definition ? Dann muss ich nämlich -1 angeben.
Warum ich das mache ?
Durch diese Definition erspare ich mir später im Code mittels "strlen" auf die Länge zu zugreifen. Ich könnte auch eine 5 für die Länge eintragen, aber das finde ich äußert unschön, wenn man den Text ändert, müste auch der Wert geändert werden.
Sinn und Zweck:
Wenn ich über die serielle Schnittstelle ein Zeichen empfange, wird dieses mit einem Zeichen des Passworts verglichen. Ist das Zeichen okay, wird mein StringIndex erhöht. Hat der StringIndex die Länge erreicht,wurde das komplette Passwort erkannt. Bei jeglichem falschen Zeichen wird der Index wieder auf 0 gesetzt.
if (SringIndex == PASSWORD_LEN) .....
ist halt wesentlich kürzer und schneller als
if (StringIndex == strlen(Password))
Bei einem hohen Datenaufkommen wäre es unnützer Ballast mit dem strlen.
Ich möchte aber nicht, daß diese Vorgehensweise Compiler spezifisch ist.
Darum die Frage, wird bei const char xx = "xxx" IMMER eine 0 angehangen. bzw bei dem sizeof() immer Anzahl der Buchstaben +1 geliefert.Oder könnte es sogar passieren, daß sizeof etwas "dazu packt"
wegen Word Aligned oder ähnlichem.
Danke für Eure Info.
Siro
Lesezeichen