Länge eines Char-Arrays in C ermitteln
-
Verwenden Sie den
sizeof
-Operator, um die Länge eines Char-Arrays zu ermitteln -
Mit der Funktion
strlen
die Länge eines Char-Arrays ermitteln
Dieser Artikel erklärt verschiedene Methoden, um die Länge eines char
-Arrays in C zu ermitteln.
Verwenden Sie den sizeof
-Operator, um die Länge eines Char-Arrays zu ermitteln
Die Array-Größe kann mit dem sizeof
-Operator unabhängig vom Datentyp des Elements berechnet werden. Allerdings kann es bei der Messung der Array-Größe zu einigen hässlichen Fehlern kommen, wenn die inneren Details ignoriert werden.
Im folgenden Beispiel werden zwei Arrays mit den Namen arr
und arr2
mit unterschiedlichen Bezeichnungen initialisiert. Dann werden die Größen der beiden Arrays mit dem sizeof
-Operator ermittelt und auf der Konsole ausgegeben.
Beachten Sie, dass die Größe des zweiten Arrays gleich 18 Byte ist, obwohl nur 17 Elemente gedruckt werden. Die Ursache für dieses Problem verbirgt sich in der Methode der Initialisierung, nämlich wenn das char
-Array mit einem String-Literalwert initialisiert wird, wird auch das abschließende Null-Byte als Teil des Arrays gespeichert. Daher bezieht der Operator sizeof
dieses Byte in die Summe aller Elemente ein und gibt das entsprechende Ergebnis zurück.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
int main(int argc, char *argv[]) {
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
char arr2[] = "array initialized";
printCharArray(arr, sizeof arr);
printf("size = %lu bytes \n", sizeof arr);
printf("\n");
printCharArray(arr2, sizeof arr2 - 1);
printf("size = %lu bytes \n", sizeof arr2);
exit(EXIT_SUCCESS);
}
Ausgabe:
a, b, c, d, e, f, g,
size = 7 bytes
size = 24 bytes
a, r, r, a, y, , i, n, i, t, i, a, l, i, z, e, d,
size = 18 bytes
size = 17 bytes
Mit der Funktion strlen
die Länge eines Char-Arrays ermitteln
In einigen Szenarien können char
-Arrays, die als null-terminierte Zeichenketten initialisiert oder gespeichert wurden, mit der Funktion strlen
, die Teil der String-Utilities der C-Standardbibliothek ist, auf ihre Größe hin vermessen werden.
Wenn wir den vorherigen Beispielcode mit den von strlen
berechneten Werten ausführen, erhalten wir unterschiedliche Zahlen, die durch verschiedene Probleme verursacht werden. Die erste - die Objektgröße von arr
wird als 24 Byte ausgegeben, weil die Funktion strlen
durch ein Char-Array iteriert, bis das abschließende Null-Byte angetroffen wird. Der Aufruf von strlen
auf das Objekt arr
führte also dazu, dass sowohl über arr
als auch über arr2
iteriert wurde, da das erste Array nicht mit einem Null-Byte terminiert ist und der Compiler das arr2
fortlaufend danach speicherte, was zu einer Größe führte, die der Summe beider Arrays minus 1 entspricht (wobei das terminierende Null-Byte verworfen wurde).
Beachten Sie, dass die von uns implementierte Funktion lengthOfArray
das Zählverhalten von strlen
imitiert und zu den gleichen Zahlen führt. Für das zweite Array-Objekt - arr2
- gibt strlen
die Anzahl der gedruckten Zeichen ohne das letzte Null-Byte zurück, was in einigen Szenarien nützlich sein kann, aber nicht die tatsächliche Größe des Arrays darstellt.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
long lengthOfArray(const char *arr) {
long size = 0;
while (*arr) {
size += 1;
arr += 1;
}
return size;
}
int main(int argc, char *argv[]) {
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
char arr2[] = "array initialized";
printCharArray(arr, sizeof arr);
printf("size = %lu bytes \n", sizeof arr);
printf("size = %lu bytes \n", strlen(arr));
printf("size = %lu bytes \n", lengthOfArray(arr));
printf("\n");
printCharArray(arr2, sizeof arr2 - 1);
printf("size = %lu bytes \n", sizeof arr2);
printf("size = %lu bytes \n", strlen(arr2));
printf("size = %lu bytes \n", lengthOfArray(arr2));
exit(EXIT_SUCCESS);
}
Ausgabe:
a, b, c, d, e, f, g,
size = 7 bytes
size = 24 bytes
size = 24 bytes
a, r, r, a, y, , i, n, i, t, i, a, l, i, z, e, d,
size = 18 bytes
size = 17 bytes
size = 17 bytes
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook