Tableaux et chaînes en C et C++
Dans cette leçon, vous allez parcourir un tableau de taille fixe et calculer la longueur d'une chaîne en toute sécurité en C et C++.
Introduction
Un tableau est une suite d'éléments du même type stockés les uns à la suite des autres en mémoire. En C, une chaîne est un tableau de caractères terminé par le caractère nul '\0'. En C++, std::string gère au contraire sa propre mémoire et connaît toujours la longueur du texte.
Points importants
- Activez les avertissements du compilateur (compiler warnings) et corrigez-les tous.
- Comprenez bien le type et la durée de vie (lifetime) de chaque valeur.
- Vérifiez toujours les données d'entrée et les limites des indices de tableau.
Voir comment ça marche
Une chaîne en C est un tableau de caractères qui se termine par '\0'. Cliquez sur un caractère pour voir son indice et son adresse mémoire.
Exemples de code C et 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
Comparaison entre C et C++
L'expression sizeof values / sizeof values[0] calcule le nombre d'éléments d'un tableau déclaré dans la même fonction, mais ne fonctionne pas avec un tableau passé à une fonction sous forme de pointeur. La fonction strlen doit parcourir chaque caractère jusqu'au '\0' pour connaître la longueur, alors que std::string::size() la renvoie immédiatement.
C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.
C++ permet toujours de travailler à bas niveau, mais ajoute des types de bibliothèque et des abstractions plus sûres.
Exercices d'approfondissement
Exécutez les deux versions, puis modifiez le code pour observer la différence de sécurité qu'apporte chaque langage.
- Testez des entrées invalides et des valeurs limites.
- Compilez avec les options -Wall -Wextra -Wpedantic pour activer davantage d'avertissements.
- Placez les déclarations communes dans un fichier d'en-tête et l'implémentation dans un fichier séparé.
S'entraîner avec un défi
Utilisez le contenu de cette leçon pour résoudre un vrai problème. Chaque défi s'exécute dans le navigateur, avec des tests instantanés et une revue par l'IA.
- Additionner un tableau Additionnez toutes les valeurs d'une liste. Facile
- Inverser une chaîne de caractères Renvoyez les caractères d'une chaîne dans l'ordre inverse. Facile