My implementation of some of the Standard C Library functions including some additional ones.
Libft (fr) (en) is an individual project at 42 that requires us to re-create some standard C library functions including some additional ones that can be used later to build a library of useful functions for the rest of the program.
Disclaimer: Reinventing the wheel is bad, 42 makes us do this just so we can have a deeper understanding of data structures and basic algorithms. At 42 we're not allowed to use some standard libraries on our projects, so we have to keep growing this library with our own functions as we go farther in the program.
As you can see from the Project instructions (french), there are 4 sections:
- Libc Functions: Some of the standard C functions
- Additional functions: Functions 42 deems will be useful for later projects
- Bonus Functions: Functions 42 deems will be useful for linked list manipulation
- Personal Functions: Functions I believe will be useful later. Documented here.
Libc functions | Additional functions | Bonus Functions | Personal Functions |
---|---|---|---|
memset | ft_memalloc | ft_lstnew | ft_factorial |
bzero | ft_memdel | ft_lstdelone | ft_islower |
memcpy | ft_strnew | ft_lstdel | ft_isupper |
memccpy | ft_strdel | ft_lstadd | ft_lstaddend |
memmove | ft_strclr | ft_lstiter | ft_lstgetlast |
memchr | ft_striter | ft_lstmap | ft_lstislast |
memcmp | ft_striteri | ft_strclen | |
strlen | ft_strmap | ft_strndup | |
strdup | ft_strmapi | ft_strwcount | |
strcpy | ft_strequ | ft_swap | |
strncpy | ft_strnequ | ||
strcat | ft_strsub | ||
strlcat | ft_strjoin | ||
strchr | ft_strtrim | ||
strrchr | ft_strsplit | ||
strstr | ft_itoa | ||
strnstr | ft_putchar | ||
strcmp | ft_putstr | ||
strncmp | ft_putendl | ||
atoi | ft_putnbr | ||
isalpha | ft_putchar_fd | ||
isdigit | ft_putstr_fd | ||
isalnum | ft_putendl_fd | ||
isascii | ft_putnbr_fd | ||
isprint | |||
toupper | |||
tolower |
Notes:
- Most of the the files and function names are namespaced with an ft in front. It stands for Fourty Two
- The project instructions require that we put all the source files in the root directory but for the sake of this Github repo, I separate them into sub folders.
- I update this list almost every month with new personal functions. If you don't know what a function does, refer to the Wiki, where I document all my personal functions.
My code is not the best, but it passed all the 42 tests successfully.
Consult man page for these functions :
- ft_memset
- ft_bzero
- ft_memcpy
- ft_memccpy
- ft_memmove
- ft_memchr
- ft_memcmp
- ft_strlen
- ft_strdup
- ft_strcpy
- ft_strncpy
- ft_strcat
- ft_strncat
- ft_strlcat
- ft_strchr
- ft_strrchr
- ft_strstrs
- ft_strnstr
- ft_strcmp
- ft_strncmp
- ft_atoi
- ft_isalpha
- ft_isdigit
- ft_isalnum
- ft_isascii
- ft_isprint
- ft_toupper
- ft_tolower
Alloue avec
malloc(3)
et retourne une zone de memoire "fraiche". La memoire allouee est intialisee a 0. Si l'allocation echoue, la fonction renvoieNULL
.
Prend en parametre l’adresse d’un pointeur dont la zone pointee doit etre liberee avec
free(3)
, puis le pointeur est mis aNULL
.
Alloue avec
malloc(3)
et retourne une chaine de caractere “fraiche” terminee par un’\0’
. Chaque caractere de la chaine est initialise a’\0’
. Si l’allocation echoue, la fonction renvoieNULL
.
Prend en parametre l’adresse d’une chaine de caracteres qui doit etre liberee avec
free(3)
et son pointeur mis aNULL
.
Assigne la valeur
’\0’
a tous les caracteres de la chaine passee en parametre.
Applique la fonction
f
a chaque caractere de la chaine de caracteres passee en parametre. Chaque caractere est passe par adresse a la fonctionf
afin de pouvoir être modifie si necessaire.
Applique la fonction
f
a chaque caractere de la chaine de caracteres passee en parametre en precisant son index en premier argument. Chaque caractere est passe par adresse a la fonctionf
afin de pouvoir etre modifie si necessaire.
Applique la fonction
f
a chaque caractere de la chaine de caracteres passee en parametre pour creer une nouvelle chaine “fraiche” avecmalloc(3)
resultant des applications successives def
.
Applique la fonction
f
a chaque caractere de la chaine de caracteres passee en parametre en precisant son index pour creer une nouvelle chaine “fraiche” avecmalloc(3)
resultant des applications successives def
.
Compare lexicographiquement s1 et s2. Si les deux chaines sont egales, la fonction retourne 1, ou 0 sinon.
Compare lexicographiquement s1 et s2 jusqu’a n caracteres maximum ou bien qu’un
’\0’
ait ete rencontre. Si les deux chaines sont egales, la fonction retourne 1, ou 0 sinon.
Alloue avec
malloc(3)
et retourne la copie "fraiche" d'un troncon de la chaine de caracteres passee en parametre. Le troncon commence a l'indexstart
et a pour longueurlen
. Sistart
etlen
ne designent pas un troncon de chaine valide, le comportement est indetermine. Si l'allocation echoue, la fonction renvoieNULL
.
Alloue avec
malloc(3)
et retourne une chaine de caracteres "fraiche" terminee pas un'\0'
resultant de la concatenation des1
ets2
. Si l'allocation echoue, la fonction renvoieNULL
.
Alloue avec
malloc(3)
et retourne une copie de la chaine passee en parametre sans les espaces blancs au debut et a la fin de cette chaine. On considere comme des espaces blancs les caracteres' '
,'\n'
et'\t'
. Sis
ne contient pas d'espaces blancs au debut ou a la fin, la fonction renvoie une copie des
. Si l'allocation echoue, la fonction renvoieNULL
.
Alloue avec
malloc(3)
et retourne un tableau de chaines de caracteres "fraiches" (toutes terminees par un'\0'
, le tableau egalement donc) resultant de la decoupe des
selon le caracterec
. Si l'allocation echoue, la fonction retourneNULL
.
Alloue avec
malloc(3)
et retourne une chaine de caracteres "fraiche" terminee par un'\0'
representatnt l'entiern
passe en parametre. Les nombres negatifs sont geres. Si l'allocation echoue, la fonction renvoieNULL
.
Affiche le caractere
c
sur la sortie standard.
Affiche la chaine
s
sur la sortir standard.
Affiche la chaine
s
sur la sortie standard suivi d'un'\n'
.
Affiche l'entier
n
sur la sortie standard.
Ecrit le caractere
c
sur le descripteur de fichierfd
.
Ecrit la chaine
s
sur le descripteur de fichierfd
.
Ecrit la chaine
s
sur le descripteur de fichierfd
suivi d'un'\n'
.
Ecrit l'entier
n
sur le descripteur de fichierfd
.
Alloue avec
malloc(3)
et retourne un maillon “frais”. Les champscontent
etcontent_size
du nouveau maillon sont initialises par copie des parametres de la fonction. Si le parametrecontent
est nul, le champscontent
est initialise aNULL
et le champscontent_size
est initialise a 0 quelque soit la valeur du parametrecontent_size
. Le champnext
est initialise aNULL
. Si l’allocation echoue, la fonction renvoieNULL
.
Prend en parametre l’adresse d’un pointeur sur un maillon et libere la memoire du contenu de ce maillon avec la fonction
del
passee en parametre puis libere la memoire du maillon en lui meme avecfree(3)
. La memoire du champnext
ne doit en aucun cas être liberee. Pour terminer, le pointeur sur le maillon maintenant libere doit etre mis aNULL
(de maniere similaire à la fonction ft_memdel).
Prend en parametre l’adresse d’un pointeur sur un maillon et libere la memoire de ce maillon et celle de tous ses successeurs l’un apres l’autre avec
del
etfree(3)
. Pour terminer, le pointeur sur le premier maillon maintenant libere doit etre mis àNULL
(de maniere similaire à la fonction ft_memdel).
Ajoute l'element
new
en tete de la liste.
Parcourt la liste
lst
en appliquant a chaque maillon la fonctionf
.
Parcourt la liste lst en appliquant à chaque maillon la fonction f et cree une nouvelle liste “fraiche” avec
malloc(3)
resultant des applications successives. Si une allocation echoue, la fonction renvoieNULL
.
Prend un int en parametre et return la factoriel de ce nombre.
Prend une string en imput et return 1 si tous les caracteres sont en miniscule. 141 >= c <= 172
Prend une string en imput et return 1 si tous les caracteres sont en majuscule. 101 >= c <= 132
Prend en parametre un pointeur sur une liste ainsi qu'un maillon de liste à ajouter à la fin de la liste. Return
void
.
Prend en parametre un pointeur sur liste et return le dernier maillon de la liste (qui n'est pas NULL).
Prend en parametre un maillon d'une liste et return 1 si le maillon est le dernier (non NULL) de la liste, 0 sinon.
Prend en parametre une string ainsi qu'un caractere. ft_strclen calcule la taille de la chaine jusqu'au caractere c, ou la taille complete si le caractere n'est pas trouvé.
Alloue avec
malloc(3)
suffisament de memoire pour copier au plusn
caractere de la string passée en parametre. Termine la chaine par'\0'
. ReturnNULL
si il n'y a pas suffisament de memoire.
Return le nombre de "mots" que contient la string passée en parametre delimites par le caractere
c
.
The goal is to create a library called libft.a from the source files so I can later use that library from other projects at 42.
To create that library, after downloading/cloning this project, cd into the project, copy all the files from the sub folders to the root directory and finally, call make:
git clone https://github.com/Makgora/libft.git
cd libft
make
You should see a libft.a file and some object files (.o).
Now to clean up (removing the .o files), call make clean
If you want to compile example.c, which is using the function ft_putstr :
gcc example.c -L. -lft
-L takes the path to your library. .
in this case
-l takes the name of your library. This is the set of characters that come after lib
in your library name.
That's it. Now run it using ./a.out
This is a list of my projects that use Libft extensively: