8.1 KiB
8.1 KiB
Libft - École 42
Description
Libft est le premier projet de l'École 42 et constitue une bibliothèque C personnelle qui regroupe des fonctions essentielles. Cette bibliothèque sera utilisée tout au long du cursus 42 et permet de maîtriser les bases de la programmation en C.
Objectifs pédagogiques
- Maîtriser les bases de la programmation en C
- Comprendre la gestion mémoire (malloc/free)
- Implémenter des algorithmes fondamentaux
- Respecter la norme de codage 42
- Créer une bibliothèque réutilisable pour les projets futurs
Fonctions implémentées
Partie 1 - Fonctions de la libc
Manipulation de caractères
ft_isalpha- Teste si un caractère est alphabétiqueft_isdigit- Teste si un caractère est un chiffreft_isalnum- Teste si un caractère est alphanumériqueft_isascii- Teste si un caractère est ASCIIft_isprint- Teste si un caractère est imprimableft_tolower- Convertit en minusculeft_toupper- Convertit en majuscule
Manipulation de chaînes
ft_strlen- Calcule la longueur d'une chaîneft_strchr- Trouve la première occurrence d'un caractèreft_strrchr- Trouve la dernière occurrence d'un caractèreft_strncmp- Compare deux chaînes sur n caractèresft_strnstr- Trouve une sous-chaîne dans une chaîneft_strlcpy- Copie une chaîne de manière sécuriséeft_strlcat- Concatène des chaînes de manière sécurisée
Manipulation de mémoire
ft_memset- Remplit une zone mémoire avec un octetft_bzero- Met à zéro une zone mémoireft_memcpy- Copie une zone mémoireft_memmove- Copie une zone mémoire (gère les chevauchements)ft_memchr- Trouve un octet dans une zone mémoireft_memcmp- Compare deux zones mémoire
Conversion et allocation
ft_atoi- Convertit une chaîne en entierft_calloc- Alloue et initialise une zone mémoireft_strdup- Duplique une chaîne (avec allocation)
Partie 2 - Fonctions supplémentaires
Manipulation de chaînes avancée
ft_substr- Extrait une sous-chaîneft_strjoin- Joint deux chaînesft_strtrim- Supprime les caractères en début/finft_split- Divise une chaîne selon un délimiteurft_itoa- Convertit un entier en chaîneft_strmapi- Applique une fonction à chaque caractèreft_striteri- Applique une fonction à chaque caractère (avec index)
Fonctions d'écriture
ft_putchar_fd- Écrit un caractère sur un fdft_putstr_fd- Écrit une chaîne sur un fdft_putendl_fd- Écrit une chaîne + '\n' sur un fdft_putnbr_fd- Écrit un nombre sur un fd
Bonus - Listes chaînées
Structure
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
Fonctions de manipulation
ft_lstnew- Crée un nouvel élémentft_lstadd_front- Ajoute un élément au débutft_lstsize- Compte les élémentsft_lstlast- Retourne le dernier élémentft_lstadd_back- Ajoute un élément à la finft_lstdelone- Supprime un élémentft_lstclear- Supprime et libère toute la listeft_lstiter- Applique une fonction à chaque élémentft_lstmap- Applique une fonction et crée une nouvelle liste
Installation et utilisation
Compilation
git clone <repository-url>
cd libft
make
Utilisation dans un projet
#include "libft.h"
int main(void)
{
char *str = ft_strdup("Hello, World!");
char **split = ft_split(str, ' ');
// Utilisation des fonctions...
free(str);
// Libérer split...
return (0);
}
Compilation avec la libft
gcc -Wall -Wextra -Werror -L. -lft main.c
Structure du projet
libft/
├── Makefile # Compilation et règles
├── libft.h # Header avec prototypes
├── ft_*.c # Fonctions principales
├── ft_lst*.c # Fonctions bonus (listes)
└── README.md # Documentation
Makefile
Règles disponibles
make/make all- Compile la bibliothèque libft.amake bonus- Compile avec les fonctions bonusmake clean- Supprime les fichiers .omake fclean- Supprime tout + libft.amake re- Recompile entièrement
Flags de compilation
CC = gcc
CFLAGS = -Wall -Wextra -Werror
Tests et validation
Tests recommandés
# Test basique
make && echo "Compilation OK"
# Test avec main personnalisé
gcc -Wall -Wextra -Werror -L. -lft test_main.c
# Vérification mémoire
valgrind ./a.out
Outils de test tiers
- libft-unit-test - Tests automatisés
- 42TESTERS-LIBFT - Batterie de tests complète
- libftTester - Tests avec comparaison libc
Exemples d'utilisation
Manipulation de chaînes
#include "libft.h"
int main(void)
{
char *str = " Hello, World! ";
char *trimmed = ft_strtrim(str, " ");
char **words = ft_split(trimmed, ',');
printf("Original: '%s'\n", str);
printf("Trimmed: '%s'\n", trimmed);
printf("First word: '%s'\n", words[0]);
free(trimmed);
// Libérer words...
return (0);
}
Listes chaînées
#include "libft.h"
int main(void)
{
t_list *lst = NULL;
ft_lstadd_back(&lst, ft_lstnew(ft_strdup("First")));
ft_lstadd_back(&lst, ft_lstnew(ft_strdup("Second")));
ft_lstadd_back(&lst, ft_lstnew(ft_strdup("Third")));
printf("List size: %d\n", ft_lstsize(lst));
ft_lstclear(&lst, free);
return (0);
}
Conversion et validation
#include "libft.h"
int main(void)
{
char *input = "42";
if (ft_isdigit(*input))
{
int num = ft_atoi(input);
char *str_num = ft_itoa(num * 2);
printf("Double: %s\n", str_num);
free(str_num);
}
return (0);
}
Algorithmes et complexités
Complexités temporelles
| Fonction | Complexité | Description |
|---|---|---|
| ft_strlen | O(n) | Parcours linéaire |
| ft_strchr | O(n) | Recherche linéaire |
| ft_memcpy | O(n) | Copie octet par octet |
| ft_split | O(n) | Avec allocation multiple |
| ft_lstsize | O(n) | Parcours de liste |
Optimisations implémentées
- Protection contre NULL dans toutes les fonctions
- Gestion des cas limites (chaînes vides, etc.)
- Efficacité mémoire avec malloc minimal
- Réutilisation de fonctions entre elles
Gestion mémoire
Stratégies appliquées
- Vérification systématique des retours malloc
- Libération en cas d'échec partiel
- Protection contre les double-free
- Tests Valgrind pour validation
Fonctions d'allocation
// Allocation sécurisée avec vérification
void *ft_calloc(size_t count, size_t size);
// Duplication avec gestion d'erreur
char *ft_strdup(const char *s1);
// Extraction avec allocation
char *ft_substr(char const *s, unsigned int start, size_t len);
Normes et contraintes 42
Norme de codage respectée
- 25 lignes maximum par fonction
- 5 fonctions maximum par fichier
- Noms de variables explicites
- Pas de variables globales
- Gestion d'erreurs obligatoire
Fonctions interdites
- Aucune fonction de la libc autorisée
- Implémentation from scratch obligatoire
- Tests de conformité avec comportement original
Extensions possibles
Fonctions additionnelles utiles
ft_realloc- Réallocation mémoireft_strstr- Recherche de sous-chaîneft_strcmp- Comparaison complèteft_strcat- Concaténation simpleft_isspace- Test caractères blancs
Structures de données avancées
- Tableaux dynamiques (vector-like)
- Tables de hachage basiques
- Arbres binaires simples
Compétences développées
- Programmation C fondamentale
- Gestion mémoire rigoureuse
- Algorithmes de base (recherche, tri)
- Structures de données (listes chaînées)
- Debugging et tests unitaires
- Conception de bibliothèques réutilisables
- Optimisation de code
Auteur
Alexandre Pommier (apommier) - École 42
Licence
Projet académique - École 42