Char-Array in C drucken

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die for-Schleife, um ein Char-Array in C zu drucken
  2. Verwendung von printf mit dem Spezifizierer %s zum Drucken eines Zeichenarrays in C
Char-Array in C drucken

Dieser Artikel stellt mehrere Methoden vor, wie man ein Char-Array in C drucken kann.

Verwenden Sie die for-Schleife, um ein Char-Array in C zu drucken

Die for-Schleife ist die naheliegendste Lösung, wenn wir Array-Elemente einzeln ausgeben und die Ausgabe mit mehr Details formatieren wollen. Eine kritische Voraussetzung für diese Methode ist, dass wir die Array-Länge im Voraus kennen sollten.

Beachten Sie, dass wir auch andere Iterationsmethoden wie die while-Schleife verwenden können, aber dann sollten wir den Wert kennen, bei dem die Iteration aufhören soll; andernfalls würde die Iteration aus dem Rahmen fallen und den Segmentierungsfehler auslösen.

Im folgenden Beispiel demonstrieren wir die for-Schleifenmethode und iterieren genau 6 Mal über das Array mit sechs Zeichen.

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

#define STR(num) #num

int main(void) {
  char arr1[] = {'a', 'b', 'c', 'd', 'e', 'f'};

  printf(STR(arr1) ": ");
  for (int i = 0; i < 6; ++i) {
    printf("%c, ", arr1[i]);
  }
  printf("\b\b\n");

  exit(EXIT_SUCCESS);
}

Ausgabe:

arr1: a, b, c, d, e, f

Verwendung von printf mit dem Spezifizierer %s zum Drucken eines Zeichenarrays in C

Die Funktion printf ist eine mächtige Funktion zur formatierten Ausgabe. Sie kann Eingabevariablen mit Typspezifizierern manipulieren und Variablen entsprechend verarbeiten.

Das char-Array hat nämlich intern die gleiche Struktur wie die Zeichenkette im C-Stil, nur dass die Zeichen der Zeichenkette im C-Stil immer mit dem Byte \0 enden, um den Endpunkt zu kennzeichnen. Wenn wir das Null-Byte an das Ende unseres char-Arrays anhängen, können wir das gesamte Array mit einem einzeiligen printf-Aufruf ausgeben.

Wenn das abschließende Null-Byte nicht angegeben wird und printf mit dieser Methode aufgerufen wird, kann das Programm versuchen, auf Speicherbereiche zuzugreifen, was höchstwahrscheinlich zu einem Segmentierungsfehler führt.

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

#define STR(num) #num

int main(void) {
  char arr1[] = {'a', 'b', 'c', 'd', 'e', 'f'};
  char arr2[] = {'t', 'r', 'n', 'm', 'b', 'v', '\0'};

  printf("%s\n", arr1);
  printf("%s\n", arr2);

  exit(EXIT_SUCCESS);
}

Ausgabe:

abcdeftrnmbv
trnmbv

Wie Sie sehen können, erhalten wir, wenn wir arr1 ausgeben, das keinen Nullterminator hat, weitere Zeichen, bis die Iteration einen Nullterminator erreicht - \0.

Eine andere Methode, die Funktion printf zu spezialisieren, besteht darin, die Anzahl der Zeichen in der Zeichenkette innerhalb des Spezifizierers %s zu übergeben. Eine Möglichkeit, dies zu tun, ist, die Länge der Zeichenkette statisch mit einer Ganzzahl zwischen den Symbolen % und s fest zu kodieren, oder es kann durch das Symbol * ersetzt werden, um ein weiteres Ganzzahl-Argument aus den printf-Parametern zu nehmen. Beachten Sie, dass beide Methoden das Zeichen . vor der Zahl oder dem Sternchen in den Bezeichner aufnehmen.

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

#define STR(num) #num

int main(void) {
  char arr1[] = {'a', 'b', 'c', 'd', 'e', 'f'};
  char arr2[] = {'t', 'r', 'n', 'm', 'b', 'v', '\0'};

  printf("%.6s\n", arr1);
  printf("%.*s\n", (int)sizeof arr1, arr2);

  exit(EXIT_SUCCESS);
}

Ausgabe:

abcdef
trnmbv
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