Bonsoir,

Tout d'abord voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
#include <stdarg.h>
 #include <stdio.h>
#include <stdlib.h>
include "my_printf.h"
 
char    *my_tab_flag()
{
  char  *tab;
 
  tab = malloc(sizeof(tab) * 14);
  tab[0] = '%';
  tab[1] = 'd';
  tab[2] = 'i';
  tab[3] = 'c';
  tab[4] = 's';
  tab[5] = 'p';
  tab[6] = 'o';
  tab[7] = 'x';
  tab[8] = 'b';
  tab[9] = 'X';
  tab[10] = ' ';
  tab[11] = 'S';
  tab[12] = 'u';
  tab[13] = '\0';
  return (tab);
}
 
int     my_is_flag(char c, char *str)
{ 
  int   i;
 
  i = 0;
  while (str && str[i] && c != str[i])
    i = i + 1;
  return (i);
}
 
ptr_func        *make_ptr_func()
{
  ptr_func      *ptr_flag;
 
  ptr_flag = malloc(sizeof(ptr_flag) * 14);
  ptr_flag[0] = flag_perc;
  ptr_flag[1] = flag_di;
  ptr_flag[2] = flag_di;
  ptr_flag[3] = flag_c;
  ptr_flag[4] = flag_s;
  ptr_flag[5] = flag_p;
  ptr_flag[6] = flag_o;
  ptr_flag[7] = flag_x;
  ptr_flag[8] = flag_b;
  ptr_flag[9] = flag_X;
  ptr_flag[10] = flag_space;
  ptr_flag[11] = flag_S;
  ptr_flag[12] = flag_u;
  ptr_flag[13] = '\0';
  return (ptr_flag);
}
 
int     my_printf2(const char *format, va_list ap, int i)
{
  int   result;
  int   returned;
  ptr_func      *ptr_flag;
  char  *tab_flag;
 
  returned = 0;
  ptr_flag = make_ptr_func();
  tab_flag = my_tab_flag();
  while (format && format[i])
    {
      if (format[i] == '%')
        result = my_is_flag(format[i + 1], tab_flag);
      if (format[i] == '%' && result < 13)
        {
          returned = returned + ptr_flag[result](ap) - 1;
          i++;
        }
      else
        my_putchar(format[i]);
      returned++;
      i++;
    }
  return (returned);
}
 
int     my_printf(const char *format, ...)
{
  va_list       ap;
  int   returned;
  int   i;
 
  i = 0;
  va_start(ap, format);
  returned = my_printf2(format, ap, i);
  va_end(ap);
  return (returned);
}
Voici mon printf.h :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
#ifndef __MY_PRINTF__
   #define __MY_PRINTF__
 
typedef int (*ptr_func)(va_list ap);
 
int    flag_di(va_list ap);
int     flag_perc(va_list ap);
int     flag_c(va_list ap);
int     flag_s(va_list ap);
int     flag_p(va_list ap);
int     flag_b(va_list ap);
int     flag_x(va_list ap);
int     flag_X(va_list ap);
int     flag_o(va_list ap);
int     flag_space(va_list ap);
int     flag_S(va_list ap);
int     flag_u(va_list ap);
 
#endif
En gros, j'essaie de recoder la fonction printf, mais, j'ai une erreur de compilation :
"undefined reference to" pour tous mes flags.

Je ne vois vraiment pas comment faire :/

Merci de votre aide.