Stampa array di caratteri in C

Jinku Hu 12 ottobre 2023
  1. Usa il cicli for per stampare un array di caratteri in C
  2. Usa printf con l’identificatore %s per stampare un array di caratteri in C
Stampa 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
Autore: 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

Articolo correlato - C Array