-
Débogage : Apprendre à utiliser les outils de débogage (
gdb) pour identifier et corriger les erreurs dans les programmes en C. -
Chaîne de compilation : Comprendre le processus complet de compilation en C avec
gcc, y compris les étapes de prétraitement, compilation, assemblage et édition des liens. -
Manipulation de chaînes de caractères : Maîtriser les techniques de manipulation de chaînes de caractères en C, incluant les opérations de recherche, découpage, et concaténation.
-
Gestion des données et recherche de phrases : Utiliser les structures en C pour gérer des informations (comme les données d’étudiant.e.s) et implémenter des techniques pour rechercher des phrases spécifiques dans des fichiers.
Cet exercice présente une brève introduction à gdb et explique comment déboguer votre programme C à l'aide de gdb.
Le code suivant (erreurs.c) présente une erreur majeure : il tente d'accéder à des indices de tableau supérieurs à la taille maximale du tableau (100).
#include <stdio.h>
int main() {
int tableau[100];
for (int compteur = 0; compteur < sizeof(tableau); compteur++) { //Erreur
tableau[compteur] = tableau[compteur] * 2;
}
return 0;
}- Compilation simple :
$ gcc erreurs.c- Exécution :
./a.out
*** stack smashing detected ***: terminatedLe programme se plante comme prévu.
- Compiler avec informations de débogage :
$ gcc -ggdb3 erreurs.c -o erreurs- Lancer GDB :
$ gdb erreursVous verrez l’invite (gdb).
- Exécuter le programme :
(gdb) rLe programme s'arrête en cas d'erreur. Pour voir la pile d'appels :
(gdb) bt- Placer un point d'arrêt à la ligne 10 :
(gdb) break erreurs.c:10- Exécuter jusqu’au point d’arrêt :
(gdb) r- Inspecter les variables :
(gdb) p tableau
(gdb) p tableau[0]@5- Avancer instruction par instruction :
(gdb) n- Continuer l’exécution jusqu’au prochain point d’arrêt ou fin :
(gdb) continue- Quitter GDB :
(gdb) quit- Préprocesseur : Gère les directives
#includeet les macros. - Compilation : Transforme le code en assembleur.
- Assemblage : Produit des fichiers objets
.o. - Édition de liens : Combine les objets et bibliothèques pour créer l’exécutable.
- Exécution : Lancer le programme binaire.
#include <math.h>
#include <stdio.h>
float calculer_aire(float rayon) {
return M_PI * rayon * rayon;
}
int main() {
float rayon = 5.0;
float aire = calculer_aire(rayon);
printf("L'aire du cercle de rayon %.2f est %.2f\n", rayon, aire);
return 0;
}# Préprocesseur
gcc -E aire.c -o aire.i
# Compilation
gcc -O2 -S aire.i -o aire.s
# Assemblage
gcc -c aire.s -o aire.o
# Edition de liens
gcc aire.o -lm -o aire
# Exécution
./airesphere.h: définitionssurface.c: fonctions surfacevolume.c: fonctions volumemain.c: programme principal
# Préprocesseur
gcc -E main.c -o main.i
gcc -E volume.c -o volume.i
gcc -E surface.c -o surface.i
# Compilation avec optimisation
gcc -O3 -c main.i -o main.o
gcc -O3 -c volume.i -o volume.o
gcc -O3 -c surface.i -o surface.o
# Edition de liens
gcc main.o volume.o surface.o -lm -o sphere
# Exécution
./sphereObjectifs :
- Calculer la longueur d’une chaîne.
- Copier une chaîne dans une autre.
- Concaténer deux chaînes.
Instructions :
Écrire un programme chaine.c qui demande à l’utilisateur deux chaînes et applique les trois opérations. Les résultats doivent être affichés.
Objectif : Écrire un programme bd_école.c pour gérer les données de 5 étudiant.e.s.
- Définir une structure
structpour l’étudiant (nom, prénom, adresse, notes). - Initialiser et manipuler les données (
strcpy). - Demander à l’utilisateur de saisir les informations pour chaque étudiant.
- Afficher les informations après saisie.
Objectif : Écrire un programme phrases.c pour rechercher une phrase dans un fichier.
- Demander le nom du fichier et la phrase à rechercher.
- Lire le fichier ligne par ligne (
fopen,fgets,fclose). - Pour chaque ligne, compter le nombre d’occurrences de la phrase.
- Afficher les résultats formatés.
Objectif : Écrire un programme couleurs.c qui stocke 100 couleurs (R, G, B, A) et affiche les couleurs distinctes avec leur nombre d’occurrences.
- Définir une structure
Couleur. - Créer un tableau de 100 couleurs.
- Compter les occurrences de chaque couleur distincte.
- Afficher les résultats.
Rechercher une phrase dans un tableau de phrases
Écrivez un programme en C nommé chercher.c* qui contient un tableau de 10 phrases (tableau de tableaux de caractères) et qui recherche si une phrase donnée est présente dans le tableau. L'objectif est de réaliser cette recherche sans utiliser les fonctions de bibliothèques standards ou externes.
Exemple: Supposons que le tableau contienne les phrases suivantes :
"Bonjour, comment ça va ?"
"Le temps est magnifique aujourd'hui."
"C'est une belle journée."
"La programmation en C est amusante."
"Les tableaux en C sont puissants."
"Les pointeurs en C peuvent être déroutants."
"Il fait beau dehors."
"La recherche dans un tableau est intéressante."
"Les structures de données sont importantes."
"Programmer en C, c'est génial."
Si on recherche la phrase "La programmation en C est amusante.", le programme doit afficher Phrase trouvée. Si on recherche Je préfère le Python., le programme doit afficher hrase non trouvée.
Objectif : Créer un rapport (programmation_C.md) qui synthétise :
- Débogage avec GDB.
- Chaîne de compilation en C avec
gcc. - Manipulation de chaînes en C.
- Gestion des structures pour les données et recherche dans les fichiers.
- Markdown :
programmation_C.md,CONTRIBUTORS.md,README.md - C :
aire.c,bd_école.c,chaine.c,chercher.c,couleurs.c,erreurs.c,main.c,phrases.c,sizeof_types.c,sphere.h,surface.c,volume.c
Instructions générales :
- Ajouter des commentaires dans les fichiers C (nom, objectif, auteurs, lignes importantes).
- Mettre à jour le fichier
README.md. - Livrer un unique fichier
.zip.