Stampa array di caratteri in C
-
Usa il cicli
for
per stampare un array di caratteri in C -
Usa
printf
con l’identificatore%s
per stampare un array di caratteri in C
Questo articolo introdurrà più metodi su come stampare un array di caratteri in C.
Usa il cicli for
per stampare un array di caratteri in C
Il cicli for
è la soluzione più ovvia se vogliamo stampare gli elementi dell’array separatamente e formattare l’output con maggiori dettagli. Un prerequisito critico per questo metodo è che dovremmo conoscere in anticipo la lunghezza dell’array.
Nota che possiamo usare altri metodi di iterazione come il cicli while
, ma poi dovremmo conoscere il valore al quale l’iterazione dovrebbe fermarsi; altrimenti, l’iterazione andrebbe fuori limite generando l’errore di segmentazione.
Nell’esempio seguente, dimostriamo il metodo del cicli for
e ripetiamo esattamente 6 volte sull’array di sei caratteri.
#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);
}
Produzione:
arr1: a, b, c, d, e, f
Usa printf
con l’identificatore %s
per stampare un array di caratteri in C
La funzione printf
è una potente funzione per l’output formattato. Può manipolare variabili di input con specificatori di tipo e variabili di processo in modo corrispondente.
Vale a dire, l’array char
ha internamente la stessa struttura della stringa in stile C, eccetto che i caratteri della stringa in stile C terminano sempre con \0
byte per denotare il punto finale. Se aggiungiamo il byte nullo alla fine del nostro array char
, possiamo stampare l’intero array con una chiamata printf
su una sola riga.
Se il byte nullo di terminazione non è specificato e printf
viene chiamato con questo metodo, il programma potrebbe tentare di accedere alle regioni di memoria che molto probabilmente causeranno un errore di segmentazione.
#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);
}
Produzione:
abcdeftrnmbv
trnmbv
Come puoi vedere, quando stampiamo arr1
che non ha il terminatore nullo, avremo più caratteri fino a quando l’iterazione non raggiunge un terminatore nullo - \0
.
Un altro metodo per specializzare la funzione printf
è passare il numero di caratteri nella stringa all’interno dell’identificatore %s
. Un modo per farlo è codificare staticamente la lunghezza della stringa con un intero tra i simboli %
e s
, oppure può essere sostituito con il simbolo *
per prendere un altro argomento intero da printf
parametri. Nota che entrambi i metodi includono .
carattere prima del numero o dell’asterisco nello specificatore.
#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);
}
Produzione:
abcdef
trnmbv
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