In C, wenn Sie einen Zeiger auf ein Array haben, gibt es keine Möglichkeit, die Länge dieses Arrays zu bestimmen. Wie @AProgrammer darauf hinwies, hätten die Entwickler es dabei belassen und den Programmierer gezwungen, die Länge aller Zeichenfelder im Auge zu behalten. Dies hätte jedoch die Textverarbeitung in C noch schwieriger gemacht.
Daher entschieden sich die Sprachentwickler für eine Konvention, die es ermöglichen würde, die Zeichenfolgenlänge durch das Vorhandensein eines Nullzeichens abzuleiten, das das Ende der Zeichenfolge angibt.
Betrachten wir zum Beispiel strcpy
:
char *strcpy(char *destination, const char *source);
Es gibt keine Möglichkeit, in C ist die Länge des Arrays zu bestimmen, dass die Zeiger destination
und source
Punkt. Ohne das Vorhandensein eines Sentinel-Werts, um das Ende der Zeichenfolge anzuzeigen, wäre die einzige andere Lösung gewesen, zusätzliche Parameter zu übergeben, die die Länge der Zeichenfolge source
angeben.
Natürlich wurden im Hinblick auf moderne Sicherheitsaspekte String-Verarbeitungsfunktionen eingeführt, die Pufferlängenparameter erhalten. Aber die Computerlandschaft sah zu der Zeit, als die nullterminierte Zeichenkette erfunden wurde, sehr anders aus.
ja aber, ich meine wenn ich char arr [2] = {'h', 'i'}; Ich schätze der Compiler kennt die Länge von arr. –
@AlexDannk Ja, das stimmt. Aber es ist offensichtlich nicht sinnvoll, wenn alle Strings auf die gleiche Länge beschränkt sind. –
Entschuldigung! Ich habe nicht verstanden, was du damit meinst.Sie sagten, es ist nützlich, um die Länge des Arrays zu kennen. aber der Compiler kennt bereits die Länge jedes Arrays. also finde ich es nicht nützlich –