Inizializza l'array di caratteri in C

Jinku Hu 12 ottobre 2023
  1. Usa {} notazione lista con parentesi graffe per inizializzare un array char in C
  2. Usa l’assegnazione di stringhe per inizializzare un array char in C
  3. Usa {{ }} doppie parentesi graffe per inizializzare l’array char 2D in C
Inizializza l'array di caratteri 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, .,
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