Der Begriff "Länge" ist eine Art von kniffligen in C (und Low-Level-Programmierung im Allgemeinen). Wenn Sie ein Array haben, weiß der C-Compiler, wie groß er ist, und stellt dem Programmierer eine Schnittstelle zur Verfügung, um diesen Wert in Bytes zu erhalten: sizeof
. Die Sache ist, Arrays werden über Zeiger in C übergeben und die Bestimmung der Größe über Zeiger ist ohne bestimmte Meta-Informationen unmöglich. Gängige Methoden zur Bestimmung der Länge eines Arrays sind
Hinzufügen eines Endmarkers zum Array. Das Bestimmen der Länge ist einfach eine Frage des Iterierens, bis der Endmarker gefunden ist und die Anzahl der Iterationen zurückgibt. Beachten Sie, dass dadurch der Wert des End-Markers für die Verwendung als Wert im Array nicht verfügbar ist.
nur die Größe des Arrays um. Nehmen Sie als Beispiel den Systemaufruf write
. Neben dem Datei-Handle benötigt es einen Zeiger auf die Daten und ihre Länge. Warum seine Länge sowie? Weil der Zeiger keine Informationen über die Länge enthält. Verwenden Sie also entweder ein Terminator wie ein Null-Byte oder übergeben Sie die Länge explizit. Die frühere Idee kann aufgegeben werden, weil der Systemaufruf write
generisch sein soll; und um eine Generizität zu erhalten, muss erwartet werden, dass ein Null-Byte ein möglicher Wert in dem Array ist, so dass es aus Gründen, die ich oben geäußert habe, nicht als ein Terminator verwendet werden kann.
Welche Sie tatsächlich am Ende verwenden, hängt vollständig vom jeweiligen Anwendungsfall ab.
Offenbar entschied man die Terminator-Variante zu verwenden. \0
ist das Null-Byte, ein ASCII-Zeichen mit Code-Wert 0x0
. Es wird häufig zum Beenden von C-Strings verwendet. strlen
verwendet es, um zum Beispiel die Länge eines C-Strings zu bestimmen.
Für int
Arrays gibt es keinen solchen vordefinierten Terminator. Sie müssen also einen eigenen Terminator erstellen. Wenn Sie auf \0
entscheiden, so sei es, aber ich würde stattdessen das Literal 0x0
verwenden, weil genau gesagt, \0
ein Zeichen Literal ist und das ist nur unpassend für int
s.
Um dies tatsächlich zu implementieren, müssen Sie den Abschlusswert an jedes Array int
anhängen, dessen Größe Sie auf diese Weise bestimmen möchten. Schreiben Sie dann Ihre Funktion, um die Länge eines solchen int
Arrays genau wie Sie zu erhalten, d. H. Indem Sie iterieren, bis der Terminator gefunden ist.
Sie haben gerade 'strlen' für eine Liste von ganzen Zahlen umgeschrieben ... –
" Ich arbeite gerade an einer Methode, um die Länge des Arrays von Werten zu finden, die ich eingescannt habe "- wenn Sie die Bis zu diesem Zeitpunkt haben Sie wahrscheinlich einen Pufferüberlauf im Code, der die Werte liest. – user2357112
Liste der ganzen Zahlen mit 'list [c]! = '\ 0''check .. – Stefan