Array e stringhe in C e C++
In questa lezione scorrerai un array di dimensione fissa e calcolerai in modo sicuro la lunghezza di una stringa in C e C++.
Introduzione
Un array è una sequenza di elementi dello stesso tipo memorizzati uno dopo l'altro in memoria. In C una stringa è un array di caratteri che termina con il carattere nullo '\0'. In C++, invece, std::string gestisce da sola la propria memoria e conosce sempre la lunghezza del testo.
Punti importanti
- Attiva gli avvisi del compilatore (compiler warning) e correggili tutti.
- Comprendi bene il tipo di dato e la durata (lifetime) di ogni valore.
- Controlla sempre i dati in ingresso e i limiti degli indici degli array.
Guarda come funziona
Una stringa in C è un array di caratteri che termina con '\0'. Fai clic su un carattere per vedere il suo indice e il suo indirizzo di memoria.
Esempi di codice C e C++
#include <stdio.h>
#include <string.h>
int main(void) {
int values[] = {3, 5, 8, 13};
char name[] = "Ada";
size_t count = sizeof values / sizeof values[0];
printf("%s: %zu values, %zu letters\n", name, count, strlen(name));
return 0;
}
Ada: 4 values, 3 letters
#include <array>
#include <iostream>
#include <string>
int main() {
std::array values{3, 5, 8, 13};
std::string name = "Ada";
std::cout << name << ": " << values.size()
<< " values, " << name.size() << " letters\n";
}
Ada: 4 values, 3 letters
Confronto tra C e C++
L'espressione sizeof values / sizeof values[0] calcola il numero di elementi di un array dichiarato nella stessa funzione, ma non funziona con un array passato a una funzione come puntatore. La funzione strlen deve scorrere ogni carattere fino a trovare '\0' per conoscere la lunghezza, mentre std::string::size() la restituisce subito.
C usa piccole funzioni procedurali e mostra apertamente come i dati sono rappresentati in memoria.
C++ continua a permettere il lavoro a basso livello, ma aggiunge tipi di libreria e astrazioni più sicure.
Esercizi di approfondimento
Esegui entrambe le versioni e poi modifica il codice per osservare la differenza di sicurezza che offre ciascun linguaggio.
- Prova input non validi e valori ai limiti.
- Compila con i flag -Wall -Wextra -Wpedantic per attivare più avvisi.
- Sposta le dichiarazioni condivise in un file header e l'implementazione in un altro file.
Esercitati con una sfida
Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.
- Somma di un Array Somma tutti i valori in una lista. Facile
- Inverti una stringa Restituisci i caratteri di una stringa in ordine inverso. Facile