Char-Array in C initialisieren
-
Verwenden Sie die geschweifte Listenschreibweise, um ein
char
-Array in C zu initialisieren -
String-Zuweisung verwenden, um ein
char
-Array in C zu initialisieren -
Doppelte geschweifte Klammern verwenden, um ein 2D-
char
-Array in C zu initialisieren
Dieser Artikel demonstriert mehrere Methoden, wie ein char
-Array in C initialisiert werden kann.
Verwenden Sie die geschweifte Listenschreibweise, um ein char
-Array in C zu initialisieren
Ein char
-Array wird meist als Struktur mit fester Größe deklariert und oft sofort initialisiert. Die geschweifte Listenschreibweise ist eine der verfügbaren Methoden, um das char
-Array mit konstanten Werten zu initialisieren. Es ist möglich, nur den Teil der Elemente in den geschweiften Klammern anzugeben, da der Rest von char
implizit mit einem Null-Byte-Wert initialisiert wird. Dies kann nützlich sein, wenn das char
-Array als Zeichenkette ausgegeben werden soll. Da am Ende gültiger Zeichen garantiert ein Null-Byte-Zeichen gespeichert wird, kann die Funktion printf
mit dem Format-String-Spezifizierer %s
effizient genutzt werden, um den Inhalt des Arrays auszugeben.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
printf("arr: ");
for (int i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
enum { LENGTH = 21, HEIGHT = 5 };
int main() {
char c_arr[LENGTH] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
printCharArray(c_arr, LENGTH);
exit(EXIT_SUCCESS);
}
Ausgabe:
arr: a, b, c, d, e, f, g, , , , , , , , , , , , , , ,
String-Zuweisung verwenden, um ein char
-Array in C zu initialisieren
Eine weitere nützliche Methode, ein char
-Array zu initialisieren, ist die Zuweisung eines String-Wertes in der Deklarationsanweisung. Das String-Literal sollte weniger Zeichen haben als die Länge des Arrays; andernfalls wird nur ein Teil des Strings gespeichert und kein abschließendes Null-Zeichen am Ende des Puffers. Wenn der Benutzer also versucht, den Inhalt des Arrays mit dem Spezifizierer %s
zu drucken, wird er möglicherweise auf den Speicherbereich nach dem letzten Zeichen zugreifen und wahrscheinlich einen Fehler auslösen.
Beachten Sie, dass c_arr
eine Länge von 21 Zeichen hat und mit einer 20 Zeichen
langen Zeichenkette initialisiert wird. Folglich ist das 21. Zeichen im Array garantiert ein \0
Byte, was den Inhalt zu einer gültigen Zeichenkette macht.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
printf("arr: ");
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
enum { LENGTH = 21, HEIGHT = 5 };
int main() {
char c_arr[LENGTH] = "array initialization";
char c_arr2[LENGTH] = "array initialization.f";
printCharArray(c_arr, LENGTH);
printCharArray(c_arr2, LENGTH);
printf("%s\n", c_arr);
printf("%s\n", c_arr2);
exit(EXIT_SUCCESS);
}
Ausgabe:
arr: a, r, r, a, y, , i, n, i, t, i, a, l, i, z, a, t, i, o, n, ,
arr: a, r, r, a, y, , i, n, i, t, i, a, l, i, z, a, t, i, o, n, .,
array initialization
array initialization.//garbage values//
Doppelte geschweifte Klammern verwenden, um ein 2D- char
-Array in C zu initialisieren
Die Liste mit geschweiften Klammern kann auch verwendet werden, um zweidimensionale char
-Arrays zu initialisieren. In diesem Fall deklarieren wir ein 5x5 char
-Array und fügen fünf geschweifte Zeichenketten innerhalb der äußeren geschweiften Klammern ein. Beachten Sie, dass jedes String-Literal in diesem Beispiel die fünf Elemente umfassenden Zeilen der Matrix initialisiert. Der Inhalt dieses zweidimensionalen Arrays kann nicht mit dem Spezifizierer %s
gedruckt werden, da die Länge jeder Zeile mit der Länge der String-Literale übereinstimmt; es gibt also kein terminierendes Null-Byte, das implizit während der Initialisierung gespeichert wird. Normalerweise warnt der Compiler, wenn die String-Literale größer als die Array-Zeilen sind.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum { LENGTH = 5, HEIGHT = 5 };
int main() {
char c_arr[HEIGHT][HEIGHT] = {
{"hello"}, {"there"}, {"multi"}, {"dimen"}, {"sion."}};
for (size_t i = 0; i < HEIGHT; ++i) {
for (size_t j = 0; j < HEIGHT; ++j) {
printf("%c, ", c_arr[i][j]);
}
printf("\n");
}
printf("\n");
exit(EXIT_SUCCESS);
}
Ausgabe:
h, e, l, l, o,
t, h, e, r, e,
m, u, l, t, i,
d, i, m, e, n,
s, i, o, n, .,
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