codage de la fonction printf() (re) - C - Programmation
Marsh Posté le 23-01-2012 à 20:15:16
Les paramètres que tu passes à myWrite ne sont pas bons, ton compilateur aurait du t'afficher un avertissement.
va_arg() te renvoie une valeur et non une adresse, du coup tu fais un déréférencement invalide dans myWrite().
Qui plus est, va_arg(ap, char) est une erreur à cause de la promotion implicite des entiers de taille inférieur à "int". Pour récupérer un entier de type char, il faut écrire: va_arg(ap, int)
Edit: cette ligne, bien que commentée, est aussi foireuse: myWrite(1, s=va_arg(ap, char*), (size_t)myStrlen(s));
L'ordre des arguments passé à une fonction n'est pas normalisé, dont dépend du compilateur. Tu n'as aucune garantie qu'au moment d'appeler "myStrlen(s)", s à été initialisé par l'affectation juste avant.
Marsh Posté le 23-01-2012 à 14:08:27
Bonjour à tous !
Dans un but didactique, j'essaie de recoder la fonction printf().
Lors de l’exécution de mon programme (cf ci dessous) j'ai l'erreur suivante : "Bad Format".
Le programme s'organise comme suit :
myprintf.c < myprintf.h
main.c < main.h
Ci-dessous les sources :
myprintf.h :
myprintf.c
main.h :
main.c :
Une exécution donne :
--------------------------------------------------
$ ./myprintf
test write: Bad address
i=0, k=-1, n=4, filedes=1
--------------------------------------------------
Je ne suis pas du tout familier avec les fonctions va_*() c'est pour ça que je fais des essais avec ce myprintf().
Auriez-vous une idée de l'origine de l'erreur ?
En vous remerciant d'avance.
Message édité par cybkiller le 23-01-2012 à 14:12:57