Hi
Zitat Zitat von BlackBerry
Trotzdem ist diese NULLterminierung keines wegs ein muss und wurde lediglich in der Standartbibliothek so eingeführt
Die Standardbibliothek ist Teil der Sprachdefinition und die definiert einen String (immer gerne als "C-Strings" bezeichnet) eindeutig:
Zitat Zitat von ISO/IEC 9899:1999; 7.1.1p1
A string is a contiguous sequence of characters terminated by and including the first null character.
Also nur um den Neuling nicht zu verwirren: Strings "as is" sind nullterminiert.

Doch man muss nicht mal zwingend einen String terminieren! (Verdammt! Jetzt widerspreche ich mir schon wieder... verdammte Schizophrenie!)
Wenn Du die Länge eines Strings sicher weißt, kannst Du auch damit arbeiten.

Beispiel recv().
Die Funktion empfängt eine Nachricht von einem Socket und packt sie in einen Vektor (z.B. in der Netzwerkprogrammierung ist diese Funktion unumgänglich). Der Rückgabewert der Funktion ist die Anzahl der gelesenen Bytes (also normalerweise die Länge der empfangenen Nachricht).
Der empfangene String ist nicht nullterminiert (also kein "C-String" ), aber Du kennst seine Länge. Mir fällt ad hoc keine Stringfunktion der Standardlibrary ein, die (selbst, oder ein analoges Pendant) nicht die Möglichkeit bietet, die Länge eines erwarteten Strings festzulegen.

Eine kleine Spezialfunktion gibt es, die sich hartnäckig gegen den Standard richtet. Die Rede ist von strncpy() :? . Die Funktion ist Teil der Standard-Stringfunktionen, in einem bestimmten Spezialfall arbeitet sie aber nicht mit C-Strings (nämlich wenn src größer oder gleich len ist). Aber damit sollte man fertig werden können.

Was ich eigentlich sagen wollte (um zum Topic zurückzukehren ) ist, dass man nicht immer zwingend ein Byte mehr reservieren muss, als der "String" (insofern man ihn dann noch als solchen bezeichnen darf) maximal sein darf. Und zwar genau dann nicht, wenn man die Länge des Strings genau kennt (nicht die breite des deklarierten Vektors, sondern die Länge des Strings, der in ihm steckt!!!) und nur mit Befehlen arbeitet, die keine Nullterminierung erwarten.

GreetZ RiDER