Go to file
2025-10-02 10:15:48 +02:00
double_utils.c add double tab fouctions 2022-05-02 18:22:21 +02:00
ft_atoi.c add gnl 2022-03-06 12:47:23 +01:00
ft_bzero.c add gnl 2022-03-06 12:47:23 +01:00
ft_calloc.c add gnl 2022-03-06 12:47:23 +01:00
ft_isalnum.c push 2020-12-12 13:54:37 +01:00
ft_isalpha.c push 2020-12-12 13:54:37 +01:00
ft_isascii.c push 2020-12-11 18:42:06 +01:00
ft_isdigit.c push 2020-12-12 13:54:37 +01:00
ft_isprint.c push 2020-12-11 18:42:06 +01:00
ft_itoa.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstadd_back.c push 2020-12-11 17:19:05 +01:00
ft_lstadd_front.c push 2020-12-11 17:53:04 +01:00
ft_lstbeforelast.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstclear.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstdelone.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstiter.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstlast.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstmap.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstnew.c add gnl 2022-03-06 12:47:23 +01:00
ft_lstsize.c push 2020-12-11 17:19:05 +01:00
ft_memccpy.c add gnl 2022-03-06 12:47:23 +01:00
ft_memchr.c add gnl 2022-03-06 12:47:23 +01:00
ft_memcmp.c add gnl 2022-03-06 12:47:23 +01:00
ft_memcpy.c add gnl 2022-03-06 12:47:23 +01:00
ft_memmove.c add gnl 2022-03-06 12:47:23 +01:00
ft_memset.c add gnl 2022-03-06 12:47:23 +01:00
ft_putchar_fd.c push 2020-12-11 17:19:05 +01:00
ft_putendl_fd.c push 2020-12-11 17:19:05 +01:00
ft_putnbr_fd.c add gnl 2022-03-06 12:47:23 +01:00
ft_putstr_fd.c push 2020-12-11 17:19:05 +01:00
ft_split.c add gnl 2022-03-06 12:47:23 +01:00
ft_strchr.c add gnl 2022-03-06 12:47:23 +01:00
ft_strdup.c push 2020-12-11 18:42:06 +01:00
ft_strjoin.c add gnl 2022-03-06 12:47:23 +01:00
ft_strlcat.c push 2020-12-12 18:56:10 +01:00
ft_strlcpy.c add gnl 2022-03-06 12:47:23 +01:00
ft_strlen.c add gnl 2022-03-06 12:47:23 +01:00
ft_strmapi.c add gnl 2022-03-06 12:47:23 +01:00
ft_strncmp.c add gnl 2022-03-06 12:47:23 +01:00
ft_strnstr.c add gnl 2022-03-06 12:47:23 +01:00
ft_strrchr.c add gnl 2022-03-06 12:47:23 +01:00
ft_strtrim.c add gnl 2022-03-06 12:47:23 +01:00
ft_substr.c push 2020-12-16 16:53:00 +01:00
ft_tolower.c push 2020-12-11 17:19:05 +01:00
ft_toupper.c push 2020-12-11 17:19:05 +01:00
get_next_line_utils.c add gnl 2022-03-06 12:47:23 +01:00
get_next_line.c add gnl 2022-03-06 12:47:23 +01:00
get_next_line.h add gnl 2022-03-06 12:47:23 +01:00
libft.h add double tab fouctions 2022-05-02 18:22:21 +02:00
Makefile add double tab fouctions 2022-05-02 18:22:21 +02:00
README.md docs: update README with comprehensive C library documentation 2025-10-02 10:15:48 +02:00

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étique
  • ft_isdigit - Teste si un caractère est un chiffre
  • ft_isalnum - Teste si un caractère est alphanumérique
  • ft_isascii - Teste si un caractère est ASCII
  • ft_isprint - Teste si un caractère est imprimable
  • ft_tolower - Convertit en minuscule
  • ft_toupper - Convertit en majuscule

Manipulation de chaînes

  • ft_strlen - Calcule la longueur d'une chaîne
  • ft_strchr - Trouve la première occurrence d'un caractère
  • ft_strrchr - Trouve la dernière occurrence d'un caractère
  • ft_strncmp - Compare deux chaînes sur n caractères
  • ft_strnstr - Trouve une sous-chaîne dans une chaîne
  • ft_strlcpy - Copie une chaîne de manière sécurisée
  • ft_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 octet
  • ft_bzero - Met à zéro une zone mémoire
  • ft_memcpy - Copie une zone mémoire
  • ft_memmove - Copie une zone mémoire (gère les chevauchements)
  • ft_memchr - Trouve un octet dans une zone mémoire
  • ft_memcmp - Compare deux zones mémoire

Conversion et allocation

  • ft_atoi - Convertit une chaîne en entier
  • ft_calloc - Alloue et initialise une zone mémoire
  • ft_strdup - Duplique une chaîne (avec allocation)

Partie 2 - Fonctions supplémentaires

Manipulation de chaînes avancée

  • ft_substr - Extrait une sous-chaîne
  • ft_strjoin - Joint deux chaînes
  • ft_strtrim - Supprime les caractères en début/fin
  • ft_split - Divise une chaîne selon un délimiteur
  • ft_itoa - Convertit un entier en chaîne
  • ft_strmapi - Applique une fonction à chaque caractère
  • ft_striteri - Applique une fonction à chaque caractère (avec index)

Fonctions d'écriture

  • ft_putchar_fd - Écrit un caractère sur un fd
  • ft_putstr_fd - Écrit une chaîne sur un fd
  • ft_putendl_fd - Écrit une chaîne + '\n' sur un fd
  • ft_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ément
  • ft_lstadd_front - Ajoute un élément au début
  • ft_lstsize - Compte les éléments
  • ft_lstlast - Retourne le dernier élément
  • ft_lstadd_back - Ajoute un élément à la fin
  • ft_lstdelone - Supprime un élément
  • ft_lstclear - Supprime et libère toute la liste
  • ft_lstiter - Applique une fonction à chaque élément
  • ft_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.a
  • make bonus - Compile avec les fonctions bonus
  • make clean - Supprime les fichiers .o
  • make fclean - Supprime tout + libft.a
  • make 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émoire
  • ft_strstr - Recherche de sous-chaîne
  • ft_strcmp - Comparaison complète
  • ft_strcat - Concaténation simple
  • ft_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