diff --git a/libft.fr.subject.pdf b/libft.fr.subject.pdf new file mode 100644 index 0000000..94fc08b --- /dev/null +++ b/libft.fr.subject.pdf @@ -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 l’on n’a pas accès +à toutes ces petites fonctions usuelles très pratiques. C’est 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 d’enrichir votre libft tout au long de l’anné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 s’arrêter de manière inattendue (segmentation fault, + bus error, double free, etc) mis à part dans le cas d’un 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 c’est 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 à l’aide 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 s’arrê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 d’utiliser 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. L’utilisation 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 l’utiliser 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: L’index 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 l’allocation é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 à l’index ’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 l’allocation é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 l’allocation é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 l’allocation é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’ à + l’aide 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: L’entier à convertir. +Valeur de retour La chaîne de caractères représentant l’entier. + NULL si l’allocation échoue. +Fonctions malloc +externes +autorisées Alloue (avec malloc(3)) et retourne une chaîne +Description de caractères représentant l’entier ’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 l’allocation é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 d’un 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: L’entier à écrire. + fd: Le descripteur de fichier sur lequel écrire. +Valeur de retour Aucune +Fonctions write +externes +autorisées Écrit l’entier ’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 qu’avoir 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 n’importe quel type. + + • next : L’adresse 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 d’ajouter les fonctions +demandées à votre libft.a. + + Vous ne devez pas suffixer vos fichiers .c et vos fichiers d’en-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 n’avez 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 à l’aide 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: L’adresse du pointeur vers le premier élément + de la liste. +Valeur de retour new: L’adresse 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: L’adresse du pointeur vers le premier élément + de la liste. +Valeur de retour new: L’adresse 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: L’adresse 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: L’adresse du pointeur vers un élément. + del: L’adresse de la fonction permettant de +Valeur de retour supprimer le contenu d’un é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, à + l’aide 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: L’adresse du pointeur vers un élément. + f: L’adresse 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: L’adresse du pointeur vers un élément. + f: L’adresse de la fonction à appliquer. +Valeur de retour del: L’adresse de la fonction permettant de + supprimer le contenu d’un élément. +Fonctions La nouvelle liste. +externes NULL si l’allocation é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 d’un élément si nécessaire. + + 15 + Chapitre V +Rendu et peer-evaluation + + Rendez votre travail sur votre dépot Git comme d’habitude. 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 + diff --git a/libft.webp b/libft.webp new file mode 100644 index 0000000..f7a24ae Binary files /dev/null and b/libft.webp differ