Die zweite Variante ist gefährlich...
Ich bin nicht sicher ob für diesen speziellen Fall etwas im C-Standard spezifiziert ist, würde aber erstmal vom worst-case Fall ausgehen, nämlich daß der Compiler durchaus eine \0 hinter s2 schreiben könnte.
Aber selbst wenn er das nicht tut wird, wie du das bereits richtig erkannt hast, weder strcmp noch irgendeine andere Funktion korrekt arbeiten, die auf die \0 angewiesen ist (und das sind nahezu alle String-verarbeitenden Funktionen aus der Standardbibliothek).
Was du machen könntest, falls du das eine Byte wirklich zwingend einsparen musst und keine der Standardfunktionen nutzen möchtest, wäre folgende Initialisierung:
Code:
char s3[5] = {'H','a','l','l','o'};
Lesezeichen