Add files via upload

This commit is contained in:
Gras-Calvet Fernand 2025-01-20 20:08:01 +01:00 committed by GitHub
parent ff10aaaf6b
commit dc63981955
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 0 additions and 0 deletions

522
libft.fr.subject.pdf Normal file
View File

@ -0,0 +1,522 @@
Libft
Ta propre bibliothèque rien que pour toi
Résumé:
Ce projet a pour objectif de vous faire coder en C une bibliothèque de fonctions usuelles
que vous pourrez utiliser pour vos prochains projets.
Version: 16.1
Table des matières
I Introduction 2
II Règles communes 3
III Partie obligatoire 4
III.1 Considérations techniques . . . . . . . . . . . . . . . . . . . . . . . . . 4
III.2 Partie 1 - Fonctions de la libc . . . . . . . . . . . . . . . . . . . . . . 5
III.3 Partie 2 - Fonctions supplémentaires . . . . . . . . . . . . . . . . . . . 6
IV Partie bonus 11
V Rendu et peer-evaluation 16
1
Chapitre I
Introduction
La programmation en C est une activité très laborieuse dès lors que lon na pas accès
à toutes ces petites fonctions usuelles très pratiques. Cest pourquoi nous vous proposons
à travers ce projet de prendre le temps de récrire ces fonctions, de les comprendre et
de vous les approprier. Vous pourrez alors réutiliser votre bibliothèque pour travailler
efficacement sur vos projets suivants en C.
Prenez le temps denrichir votre libft tout au long de lannée. Cependant, pour
chacun de vos projets futurs, veillez toujours à vérifier quelles sont les fonctions autorisées !
2
Chapitre II
Règles communes
• Votre projet doit être écrit en C.
• Votre projet doit être codé à la Norme. Si vous avez des fichiers ou fonctions bonus,
celles-ci seront inclues dans la vérification de la norme et vous aurez 0 au projet
en cas de faute de norme.
• Vos fonctions ne doivent pas sarrêter de manière inattendue (segmentation fault,
bus error, double free, etc) mis à part dans le cas dun comportement indéfini. Si
cela arrive, votre projet sera considéré non fonctionnel et vous aurez 0 au projet.
• Toute mémoire allouée sur la heap doit être libéré lorsque cest nécessaire. Aucun
leak ne sera toléré.
• Si le projet le demande, vous devez rendre un Makefile qui compilera vos sources
pour créer la sortie demandée, en utilisant les flags -Wall, -Wextra et -Werror.
Votre Makefile ne doit pas relink.
• Si le projet demande un Makefile, votre Makefile doit au minimum contenir les
règles $(NAME), all, clean, fclean et re.
• Pour rendre des bonus, vous devez inclure une règle bonus à votre Makefile qui
ajoutera les divers headers, librairies ou fonctions qui ne sont pas autorisées dans
la partie principale du projet. Les bonus doivent être dans un fichier différent :
_bonus.{c/h}. Lévaluation de la partie obligatoire et de la partie bonus sont
faites séparément.
• Si le projet autorise votre libft, vous devez copier ses sources et son Makefile
associé dans un dossier libft contenu à la racine. Le Makefile de votre projet doit
compiler la librairie à laide de son Makefile, puis compiler le projet.
• Nous vous recommandons de créer des programmes de test pour votre projet, bien
que ce travail ne sera pas rendu ni noté. Cela vous donnera une chance de
tester facilement votre travail ainsi que celui de vos pairs.
• Vous devez rendre votre travail sur le git qui vous est assigné. Seul le travail déposé
sur git sera évalué. Si Deepthought doit corriger votre travail, cela sera fait à la fin
des peer-evaluations. Si une erreur se produit pendant lévaluation Deepthought,
celle-ci sarrête.
3
Chapitre III
Partie obligatoire
Nom du libft.a
programme Makefile, libft.h, ft_*.c
NAME, all, clean, fclean, re
Fichiers de rendu Détails ci-dessous
Makefile n/a
Créez votre propre bibliothèque contenant des
Fonctions fonctions utiles pour la suite de votre cursus.
externes
autorisées
Libft autorisée
Description
III.1 Considérations techniques
• Interdiction dutiliser des variables globales.
• Si vous avez besoin de fonctions auxiliaires pour réaliser une fonction complexe,
vous devez définir ces dernières en static dans le respect de la Norme. Ainsi, leur
portée sera limitée au fichier concerné.
• Vous devez rendre tous vos fichiers à la racine de votre dépôt.
• Il est interdit de rendre des fichiers non utilisés.
• Chaque fichier .c doit être compilé avec les flags -Wall -Wextra -Werror.
• Vous devez utiliser la commande ar pour créer votre bibliothèque. Lutilisation de
la commande libtool est interdite.
• Votre libft.a doit être créé à la racine de votre dépôt.
4
Libft Ta propre bibliothèque rien que pour toi
III.2 Partie 1 - Fonctions de la libc
Dans cette première partie, vous devez recoder un ensemble de fonctions de la libc
telles que décrites dans leur man respectif sur votre système. Vos fonctions devront
avoir exactement le même prototype et le même comportement que les originales. Seule
différence, leur nom devra être préfixé par ft_. Ainsi, strlen devient ft_strlen.
Certains prototypes des fonctions que vous devez recoder utilisent le
qualifieur de type restrict. Ce mot-clé fait parti du standard c99.
Par conséquent, vous ne devez pas lutiliser pour vos prototypes et
ne pas compiler votre code avec le flag -std=c99.
Vous devez recoder les fonctions suivantes. Elles ne nécessitent aucune fonction externe :
• isalpha • toupper
• isdigit • tolower
• isalnum • strchr
• isascii • strrchr
• isprint • strncmp
• strlen • memchr
• memset • memcmp
• bzero • strnstr
• memcpy • atoi
• memmove
• strlcpy
• strlcat
Pour les deux fonctions suivantes, vous pourrez faire appel à la fonction malloc() :
• calloc
• strdup
5
Libft Ta propre bibliothèque rien que pour toi
III.3 Partie 2 - Fonctions supplémentaires
Dans cette seconde partie, vous devrez implémenter un certain nombre de fonctions
absentes de la libc, ou qui y sont mais sous une forme différente.
Certaines de ces fonctions peuvent faciliter lécriture des fonctions
demandées dans la Partie 1.
Function name ft_substr
Prototype char *ft_substr(char const *s, unsigned int start,
Fichiers de rendu size_t len);
Paramètres -
s: La chaîne de laquelle extraire la nouvelle
Valeur de retour chaîne.
Fonctions start: Lindex de début de la nouvelle chaîne dans
externes la chaîne s.
autorisées len: La taille maximale de la nouvelle chaîne.
Description La nouvelle chaîne de caractères.
NULL si lallocation échoue.
malloc
Alloue (avec malloc(3)) et retourne une chaîne de
caractères issue de la chaîne s.
Cette nouvelle chaîne commence à lindex start et
a pour taille maximale len.
Function name ft_strjoin
Prototype char *ft_strjoin(char const *s1, char const *s2);
Fichiers de rendu -
Paramètres s1: La chaîne de caractères préfixe.
s2: La chaîne de caractères suffixe.
Valeur de retour La nouvelle chaîne de caractères.
NULL si lallocation échoue.
Fonctions malloc
externes
autorisées Alloue (avec malloc(3)) et retourne une nouvelle
Description chaîne, résultat de la concaténation de s1 et s2.
6
Libft Ta propre bibliothèque rien que pour toi
Function name ft_strtrim
Prototype char *ft_strtrim(char const *s1, char const *set);
Fichiers de rendu -
Paramètres s1: La chaîne de caractères à trimmer.
set: Le set de référence de caractères à trimmer.
Valeur de retour La chaîne de caractères trimmée.
NULL si lallocation échoue.
Fonctions malloc
externes
autorisées Alloue (avec malloc(3)) et retourne une copie de
Description la chaîne s1, sans les caractères spécifiés
dans set au début et à la fin de la chaîne de
caractères.
Function name ft_split
Prototype char **ft_split(char const *s, char c);
Fichiers de rendu -
Paramètres s: La chaîne de caractères à découper.
c: Le caractère délimiteur.
Valeur de retour Le tableau de nouvelles chaînes de caractères
résultant du découpage.
Fonctions NULL si lallocation échoue.
externes malloc, free
autorisées
Description Alloue (avec malloc(3)) et retourne un tableau
de chaînes de caractères obtenu en séparant s à
laide du caractère c, utilisé comme délimiteur.
Le tableau doit être terminé par NULL.
Function name ft_itoa
Prototype char *ft_itoa(int n);
Fichiers de rendu -
Paramètres n: Lentier à convertir.
Valeur de retour La chaîne de caractères représentant lentier.
NULL si lallocation échoue.
Fonctions malloc
externes
autorisées Alloue (avec malloc(3)) et retourne une chaîne
Description de caractères représentant lentier n reçu en
argument. Les nombres négatifs doivent être gérés.
7
Libft Ta propre bibliothèque rien que pour toi
Function name ft_strmapi
Prototype char *ft_strmapi(char const *s, char (*f)(unsigned
int, char));
Fichiers de rendu -
Paramètres s: La chaîne de caractères sur laquelle itérer.
f: La fonction à appliquer à chaque caractère.
Valeur de retour La chaîne de caractères résultant des applications
successives de f.
Fonctions Retourne NULL si lallocation échoue.
externes malloc
autorisées
Description Applique la fonction f à chaque caractère de
la chaîne de caractères s, passant son index
comme premier argument et le caractère lui-même
comme second argument. Une nouvelle chaîne de
caractères est créée (avec malloc(3)), résultant
des applications successives de f.
Function name ft_striteri
Prototype void ft_striteri(char *s, void (*f)(unsigned int,
char*));
Fichiers de rendu -
Paramètres s: La chaîne de caractères sur laquelle itérer.
f: La fonction à appliquer à chaque caractère.
Valeur de retour Aucune
Fonctions Aucune
externes
autorisées Applique la fonction f à chaque caractère de la
Description chaîne de caractères transmise comme argument,
et en passant son index comme premier argument.
Chaque caractère est transmis par adresse à f
afin dêtre modifié si nécessaire.
8
Libft Ta propre bibliothèque rien que pour toi
Function name ft_putchar_fd
Prototype void ft_putchar_fd(char c, int fd);
Fichiers de rendu -
Paramètres c: Le caractère à écrire.
fd: Le descripteur de fichier sur lequel écrire.
Valeur de retour Aucune
Fonctions write
externes
autorisées Écrit le caractère c sur le descripteur de
Description fichier donné.
Function name ft_putstr_fd
Prototype void ft_putstr_fd(char *s, int fd);
Fichiers de rendu -
Paramètres s: La chaîne de caractères à écrire.
fd: Le descripteur de fichier sur lequel écrire.
Valeur de retour Aucune
Fonctions write
externes
autorisées Écrit la chaîne de caractères s sur le
Description descripteur de fichier donné.
Function name ft_putendl_fd
Prototype void ft_putendl_fd(char *s, int fd);
Fichiers de rendu -
Paramètres s: La chaîne de caractères à écrire.
fd: Le descripteur de fichier sur lequel écrire.
Valeur de retour Aucune
Fonctions write
externes
autorisées Écrit La chaîne de caractères s sur le
Description descripteur de fichier donné suivie dun retour à
la ligne.
9
Libft Ta propre bibliothèque rien que pour toi
Function name ft_putnbr_fd
Prototype void ft_putnbr_fd(int n, int fd);
Fichiers de rendu -
Paramètres n: Lentier à écrire.
fd: Le descripteur de fichier sur lequel écrire.
Valeur de retour Aucune
Fonctions write
externes
autorisées Écrit lentier n sur le descripteur de fichier
Description donné.
10
Chapitre IV
Partie bonus
Si vous avez réussi parfaitement la partie obligatoire, cette section propose quelques
pistes pour aller plus loin. Un peu comme quand vous achetez un DLC pour un jeu vidéo.
Avoir des fonctions de manipulation de mémoire brute et de chaînes de caractères
est très pratique. Toutefois, vous vous rendrez vite compte quavoir des fonctions de
manipulation de listes est encore plus pratique.
Vous utiliserez la structure suivante pour représenter les maillons de votre liste. Sa
déclaration est à ajouter à votre fichier libft.h :
typedef struct s_list
{
*content;
void *next;
struct s_list t_list;
}
Les membres de la structure t_list sont les suivants :
• content : La donnée contenue dans le maillon.
void * permet de stocker une donnée de nimporte quel type.
• next : Ladresse du maillon suivant de la liste, ou NULL si le maillon suivant est le
dernier.
Dans votre Makefile, une règle make bonus vous permettra dajouter les fonctions
demandées à votre libft.a.
Vous ne devez pas suffixer vos fichiers .c et vos fichiers den-tête avec _bonus. En effet,
ajoutez le suffixe _bonus seulement aux fichiers supplémentaires réalisés exclusivement
pour la partie bonus.
Les bonus ne seront évalués que si la partie obligatoire est
PARFAITE. Par parfaite, nous entendons complète et sans aucun
dysfonctionnement. Si vous navez pas réussi TOUS les points de la
partie obligatoire, votre partie bonus ne sera pas prise en compte.
11
Libft Ta propre bibliothèque rien que pour toi
Implémentez les fonctions suivantes afin de manipuler vos listes aisément.
Function name ft_lstnew
Prototype t_list *ft_lstnew(void *content);
Fichiers de rendu -
Paramètres content: Le contenu du nouvel élément.
Valeur de retour Le nouvel élément
Fonctions malloc
externes
autorisées Alloue (avec malloc(3)) et renvoie un nouvel
Description élément. La variable membre content est
initialisée à laide de la valeur du paramètre
content. La variable next est initialisée à
NULL.
Function name ft_lstadd_front
Prototype void ft_lstadd_front(t_list **lst, t_list *new);
Fichiers de rendu -
Paramètres lst: Ladresse du pointeur vers le premier élément
de la liste.
Valeur de retour new: Ladresse du pointeur vers lélément à
Fonctions rajouter à la liste.
externes Aucune
autorisées Aucune
Description
Ajoute lélément new au début de la liste.
Function name ft_lstsize
Prototype int ft_lstsize(t_list *lst);
Fichiers de rendu -
Paramètres lst: Le début de la liste.
Valeur de retour Taille de la liste
Fonctions Aucune
externes
autorisées Compte le nombre déléments de la liste.
Description
12
Libft Ta propre bibliothèque rien que pour toi
Function name ft_lstlast
Prototype t_list *ft_lstlast(t_list *lst);
Fichiers de rendu -
Paramètres lst: Le début de la liste.
Valeur de retour Dernier élément de la liste
Fonctions Aucune
externes
autorisées Renvoie le dernier élément de la liste.
Description
Function name ft_lstadd_back
Prototype void ft_lstadd_back(t_list **lst, t_list *new);
Fichiers de rendu -
Paramètres lst: Ladresse du pointeur vers le premier élément
de la liste.
Valeur de retour new: Ladresse du pointeur vers lélément à
Fonctions rajouter à la liste.
externes Aucune
autorisées Aucune
Description
Ajoute lélément new à la fin de la liste.
Function name ft_lstdelone
Prototype void ft_lstdelone(t_list *lst, void (*del)(void
*));
Fichiers de rendu -
Paramètres lst: Lélément à free
del: Ladresse de la fonction permettant de
Valeur de retour supprimer le contenu de lélément.
Fonctions Aucune
externes free
autorisées
Description Libère la mémoire de lélément passé en argument en
utilisant la fonction del puis avec free(3). La
mémoire de next ne doit pas être free.
13
Libft Ta propre bibliothèque rien que pour toi
Function name ft_lstclear
Prototype void ft_lstclear(t_list **lst, void (*del)(void
*));
Fichiers de rendu -
Paramètres lst: Ladresse du pointeur vers un élément.
del: Ladresse de la fonction permettant de
Valeur de retour supprimer le contenu dun élément.
Fonctions Aucune
externes free
autorisées
Description Supprime et libère la mémoire de lélément passé en
paramètre, et de tous les éléments qui suivent, à
laide de del et de free(3)
Enfin, le pointeur initial doit être mis à NULL.
Function name ft_lstiter
Prototype void ft_lstiter(t_list *lst, void (*f)(void *));
Fichiers de rendu -
Paramètres lst: Ladresse du pointeur vers un élément.
f: Ladresse de la fonction à appliquer.
Valeur de retour Aucune
Fonctions Aucune
externes
autorisées Itère sur la liste lst et applique la fonction
Description f au contenu chaque élément.
14
Libft Ta propre bibliothèque rien que pour toi
Function name ft_lstmap
Prototype t_list *ft_lstmap(t_list *lst, void *(*f)(void *),
void (*del)(void *));
Fichiers de rendu -
Paramètres lst: Ladresse du pointeur vers un élément.
f: Ladresse de la fonction à appliquer.
Valeur de retour del: Ladresse de la fonction permettant de
supprimer le contenu dun élément.
Fonctions La nouvelle liste.
externes NULL si lallocation échoue
autorisées malloc, free
Description
Itère sur la liste lst et applique la fonction
f au contenu de chaque élément. Crée une nouvelle
liste résultant des applications successives de
f. La fonction del est là pour détruire le
contenu dun élément si nécessaire.
15
Chapitre V
Rendu et peer-evaluation
Rendez votre travail sur votre dépot Git comme dhabitude. Seul le travail présent
sur votre dépot sera évalué en soutenance. Vérifiez bien les noms de vos dossiers et de
vos fichiers afin que ces derniers soient conformes aux demandes du sujet.
Vous devez rendre tous vos fichiers à la racine de votre dépôt.
Rnpu cebwrpg bs gur 97 Pbzzba Pber pbagnvaf na rapbqrq uvag. Sbe rnpu
pvepyr, bayl bar cebwrpg cebivqrf gur pbeerpg uvag arrqrq sbe gur
arkg pvepyr. Guvf punyyratr vf vaqvivqhny, gurer vf bayl n cevmr sbe
bar fghqrag jvaare cebivqvat nyy qrpbqrq zrffntrf. Nal nqinagntrq
crbcyr pna cynl, yvxr pheerag be sbezre fgnss, ohg gur cevmr jvyy
erznva flzobyvp. Gur uvag sbe guvf svefg cebwrpg vf:
Ynetr pbjf trarebfvgl pbzrf jvgu punegf naq sbhe oybaqr ungf gb qrsl
hccre tenivgl ureb
16

BIN
libft.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB