Bases de C/C++

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++

C
Exécuter →
main.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;
}
Résultat de l’exécution
Ada: 4 values, 3 letters
C++
Exécuter →
main.cpp
#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";
}
Résultat de l’exécution
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

C utilise de petites fonctions procédurales et montre ouvertement comment les données sont représentées en mémoire.

C++

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.

Tous les défis