Länge eines Char-Arrays in C ermitteln

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie den sizeof-Operator, um die Länge eines Char-Arrays zu ermitteln
  2. Mit der Funktion strlen die Länge eines Char-Arrays ermitteln
Länge eines Char-Arrays in C 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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Verwandter Artikel - C Char