Array von Zeichenketten in C

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die 2D-Array-Notation, um ein Array von Zeichenketten in C zu deklarieren
  2. Verwendung der char*-Array-Notation zur Deklaration eines Arrays von Zeichenketten in C
Array von Zeichenketten in C

Dieser Artikel demonstriert mehrere Methoden, wie ein Array von Strings in C deklariert werden kann.

Verwenden Sie die 2D-Array-Notation, um ein Array von Zeichenketten in C zu deklarieren

Strings in C sind einfach eine kette von Zeichen, die in einem zusammenhängenden Speicherbereich gespeichert werden. Eine Besonderheit bei Zeichenketten ist, dass am Ende der Sequenz ein abschließendes Null-Byte \0 gespeichert ist, das das Ende einer Zeichenkette kennzeichnet. Wenn wir ein festes Array von char mit der [] Notation deklarieren, dann können wir eine Zeichenkette, die aus der gleichen Anzahl von Zeichen besteht, an dieser Stelle speichern.

Beachten Sie, dass beim Kopieren der Zeichenkette an die Array-Stelle ein zusätzlicher Zeichenplatz für das abschließende Null-Byte berücksichtigt werden sollte. Man kann also ein zweidimensionales char-Array mit Klammerschreibweise deklarieren und es als Array für Zeichenketten verwenden. Die zweite Dimension des Arrays wird die maximale Länge der Zeichenkette begrenzen. In diesem Fall definieren wir willkürlich eine Makrokonstante - MAX_LENGTH gleich 100 Zeichen. Das gesamte Array kann mit der Notation {""} initialisiert werden, die jedes Zeichen-Element im Array auf Null setzt. Beim Speichern der Zeichenkettenwerte in dem bereits initialisierten Array ist der Zuweisungsoperator nicht erlaubt, und es sollten spezielle Speicherkopierfunktionen wie strcpy verwendet werden.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char arr[NUM_STRINGS][MAX_LENGTH] = {""};

  arr2[0] = "string literal";  // Not permitted
  strcpy(arr[0], "hello world");
  printf("%s\n", arr[0]);
  printf("%s\n", strcpy(arr[0], "hello world"));

  exit(EXIT_SUCCESS);
}

Ausgabe:

hello world
hello world

Alternativ können wir das zweidimensionale char-Array auch sofort bei der Deklaration initialisieren. Der moderne C11-Standard erlaubt es, char-Arrays mit String-Literalen zu initialisieren und sogar automatisch Null-Byte am Ende des Strings zu speichern, wenn die Array-Länge größer ist als der String selbst. Die Notation der Initialisierungsliste ist ähnlich der C++-Syntax. Jedes mit geschweiften Klammern versehene Element soll in einem aufeinanderfolgenden Speicherbereich der Länge MAX_LENGTH gespeichert werden. Falls die Initialisierungsnotation weniger Elemente als die Array-Größe angibt, werden die restlichen Elemente implizit mit \0 Bytes initialisiert.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char arr2[NUM_STRINGS][MAX_LENGTH] = {{"first string"},
                                        {"second string"},
                                        {"third string"},
                                        {"fourth string"},
                                        {"fifth string"}};

  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr2[i]);
  }

  exit(EXIT_SUCCESS);
}

Ausgabe:

first string, second string, third string, fourth string, fifth string, , , , , ,

Verwendung der char*-Array-Notation zur Deklaration eines Arrays von Zeichenketten in C

char* ist der Typ, der im Allgemeinen zum Speichern von Zeichenketten verwendet wird. Wenn wir das Array von char* deklarieren, erhalten wir eine feste Anzahl von Zeigern, die auf die gleiche Anzahl von Zeichenketten zeigen. Es kann, wie im folgenden Beispiel gezeigt, mit String-Literalen initialisiert, mit speziellen Funktionen, die im Header string.h bereitgestellt werden, zugewiesen oder kopiert werden.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LENGTH 100
#define NUM_STRINGS 10

int main() {
  char* arr3[NUM_STRINGS] = {"first string", "second string", "third string",
                             "fourth string", "fifth string"};
  char* str1 = "string literal";
  arr3[8] = str1;
  arr3[9] = "hello there";

  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr3[i]);
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

first string, second string, third string, fourth string, fifth string, (null), (null), (null), string literal, hello there,

Alternativ kann man nur die geschweiften Klammern {} angeben, wodurch die Zeiger im Array auf null initialisiert werden, und sie können später zur Speicherung anderer String-Adressen verwendet werden, oder der Programmierer kann sogar dynamischen Speicher zuweisen.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUM_STRINGS 10

int main() {
  char *arr4[NUM_STRINGS] = {};
  for (int i = 0; i < NUM_STRINGS; ++i) {
    printf("%s, ", arr4[i]);
  }
  printf("\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

(null), (null), (null), (null), (null), (null), (null), (null), (null), (null),
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 Array

Verwandter Artikel - C String