Projet 1 • Printf
| Champ | Valeur |
|---|---|
| Auteur·e | Élise |
| Édition | 2024-02-14 |
| Durée | 2~3 semaines |
| Taille des équipes | 1~2 personnes login des auteurs·rices dans author.txt |
| Rendu | via git, dépôt $YEAR_printf, droits en lecture à delivery_collector |
| Compilation | make avec règles all, clean, fclean, re |
| Binaires | printf.a : bibliothèqueut.out : tests unitaires |
Barème
| Critères | Points |
|---|---|
| insertion d’un format | 2 |
| insertion de plusieurs formats | 3 |
| %c | 2 |
| %s | 2 |
| %d | 2 |
| %p | 4 |
| %b, %x, %o | 4 |
| tests unitaires | 5 |
| Total des critères | 24 |
| Malus par ligne contenant une faute de norme | -0,5 |
| Malus dépôt sale | -5 |
| Note maximale | 20 |
Règlement de projet
Prévention de la triche
La réalisation de cet exercice est assujettie aux règles en vigueur dans l’école en matière de triche et de normalisation. Tricher vous expose à de graves sanctions.
Vous devez respecter les règles de normalisation suivantes : https://git.ecole-89.com/eriizu/coding_style/src/branch/main/norm.md
Le non-respect de la norme vous fera perdre une partie ou la totalité des points qui auraient pu être acquis, sur l’ensemble du rendu.
Fichiers à rendre et compilation
La structure de votre dépôt doit être la suivante :
Makefileà la racine de votre dépôt- fichiers
*.cdanssrc/ - fichiers
*.hdansinclude/ - fichiers
*.cde tests unitaires criterion danstest/
Votre Makefile doit au minimum avoir les règles all, clean, fclean et re
Vous devez aussi avoir une recette par binaire demandé dans le cartouche de sujet. La recette all doit dépendre de celles de binaires demandés.
Tests unitaires
Chacune de vos fonctions doit avoir des tests unitaires associés.
Fonctions autorisées et interdites
Pour tout le sujet, les fonctions autorisées sont :
writemallocfreeva_startva_argva_end
Consignes
Votre travaille consiste à implémenter la fonction suivante
int stu_dprintf(int fd, const char *pattern, ...);
Elle se comporte comme dprintf des bibliothèques dans les cas qui suivent. Elle renvoie le nombre de caractères qu’elle a réussi à écrire.
Ses paramètres sont :
fd: le descripteur de fichier sur lequel écrire ;pattern: la chaîne a afficher qui contient des formats ;...les arguments variadiques.
Vous devez au moins implémenter les formats suivants :
%cpour les caractères individuels ;%spour les chaînes de caractères ;%dpour les entiers à afficher en base 10 ;%ppour les pointeurs à afficher en base 16 ;%xpour les entiers à afficher en base 16 ;%bpour les entiers à afficher en binaire ;%opour les entiers à afficher en base 8 ;%%pour afficher le symbole%.
Pour les nombres entiers, vous devez implémenter le modificateur +. Regardez ce qu’il fait dans le man printf.3.
Exemple de code :
int n;
char *str;
n = stu_dprintf(1, "%d\n", 12);
stu_dprintf(2, "bytes printed %d\n", n);
stu_dprintf(1, "%+d\n", 56);
str = NULL;
stu_dprintf(1, "addr is %p\n", str);
str = strdup("LUIGI");
stu_dprintf(1, "addr is %p and str %s\n", str, str);
Sa sortie :
$ ./a.out 2> /dev/null
12
+56
addr is (null)
addr is 0x45654565 and str LUIGI
$ ./a.out > /dev/null
bytes printed 3