Inizializza l'array di caratteri in C
-
Usa
{}
notazione lista con parentesi graffe per inizializzare un arraychar
in C -
Usa l’assegnazione di stringhe per inizializzare un array
char
in C -
Usa
{{ }}
doppie parentesi graffe per inizializzare l’arraychar
2D in C
Questo articolo mostrerà diversi metodi su come inizializzare un array char
in C.
Usa {}
notazione lista con parentesi graffe per inizializzare un array char
in C
Un array char
è per lo più dichiarato come una struttura di dimensioni fisse e spesso inizializzato immediatamente. La notazione di lista con parentesi graffe è uno dei metodi disponibili per inizializzare l’array char
con valori costanti. È possibile specificare solo la parte degli elementi nelle parentesi graffe poiché il resto dei caratteri viene inizializzato implicitamente con un valore di byte nullo. Può essere utile se l’array char
deve essere stampato come una stringa di caratteri. Poiché è garantito che alla fine dei caratteri validi è garantito un carattere null byte, la funzione printf
può essere utilizzata in modo efficiente con l’identificatore di stringa di formato %s
per visualizzare il contenuto dell’array.
#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);
}
Produzione:
arr: a, b, c, d, e, f, g, , , , , , , , , , , , , , ,
Usa l’assegnazione di stringhe per inizializzare un array char
in C
Un altro metodo utile per inizializzare un array char
è assegnare un valore stringa nell’istruzione di dichiarazione. La stringa letterale dovrebbe contenere meno caratteri rispetto alla lunghezza dell’array; in caso contrario, ci sarà solo una parte della stringa memorizzata e nessun carattere nullo di terminazione alla fine del buffer. Quindi, se l’utente proverà a stampare il contenuto dell’array con l’identificatore %s
, potrebbe accedere alla regione di memoria dopo l’ultimo carattere e probabilmente genererà un errore.
Notare che c_arr
ha una lunghezza di 21 caratteri ed è inizializzato con una stringa lunga 20 caratteri
. Di conseguenza, il 21° carattere dell’array è garantito come \0
byte, rendendo il contenuto una stringa di caratteri valida.
#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);
}
Produzione:
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//
Usa {{ }}
doppie parentesi graffe per inizializzare l’array char
2D in C
L’lista tra parentesi graffe può essere utilizzato anche per inizializzare array char
bidimensionali. In questo caso, dichiariamo un array char
5x5 e includiamo cinque stringhe tra parentesi graffe all’interno delle parentesi graffe esterne. Si noti che ogni stringa letterale in questo esempio inizializza le righe a cinque elementi di un array. Il contenuto di questo array bidimensionale non può essere stampato con l’identificatore %s
poiché la lunghezza di ogni linea corrisponde alla lunghezza dei letterali stringa; quindi, non c’è nessun byte null di terminazione memorizzato implicitamente durante l’inizializzazione. Di solito, il compilatore avvisa se i valori letterali di stringa sono maggiori delle righe dell’array.
#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);
}
Produzione:
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