Bonsoir,

J'ai un programme en C et je suis embêté car j'ai une grosse fonction faisant appel à d'autre ou j'ai des variable static

Le soucis c'est que si je lance 2 fois ma grosse fonction je me fais avoir, donc je suis assez paumé pour changer la valeur de ma static vu la gueule de la fonction

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
 
char                    *process(char *s)
{
  static int            i = 0;
  int                   j;
  char                  *ret;
 
  ret = 0;
  j = 0;
  if (s[i] == '%' && s[i + 1] != '%' && s[i] != 0)
    {
      while ((s[i + ++j] == SPACE || evalchar(s[i + j], EVAL_FLAGS) != -1
             || evalchar(s[i + j], EVAL_CHARS) != -1) && s[i + j] != 0)
        ;
      ret = my_strndup(s + i, j);
      i = i + j;
    }
  else if (s[i] != 0)
    {
      if (s[i] == '%' && s[i + 1] == '%')
        j += 2;
     while (s[i + ++j] != '%' && s[i + j] != 0)
        ;
      ret = my_strndup(s + i, j);
      i = i + j;
    }
    return (ret);
}
Certains auront surement reconnu d'ou vient le code

J'ai le même problème dans une autre fonction

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
 
t_type                  *fillarg(va_list first, char *flag)
{
  t_type                *types;
  static va_list        ap = 0;
 
  if (ap == 0)
    ap = first;
  types = xmalloc(sizeof(*types));
  if (evalchar('s', flag) != -1)
    {
      types->string = va_arg(ap, char *);
      types->type = evalchar('s', flag);
    }
  else
    {
      types->integer = va_arg(ap, int);
      types->type = evalchar('d', flag);
    }
  return (types);
}
Ca serait pas mal de faire quelquechose de spécial du genre que la fonction si on l'appel avec certains parametres devienne un getter et ensuite on change la valeur à l'adresse

Le soucis c'est la valeur de retour mais c'est une mauvaise idée

Eclairez moi s'il vous plait


PS : Je suis très bête, suffit que j'envois un pointeur