Bonsoir,

J'ai recemment apprit qu'il etait inutil d'envoyer l'adresse d'un char * pour pouvoir le modifier dans une autre fonction, ce qui est logique vue qu'il s'agit d'un pointeur sur adresse.

J'ai donc voulut modifier un programme qui fonctionne (un petit interpréteur de commandes) sans envoyer des adresses systématiquement, hors ca ne fonctionne plus ! quand je lance mon exécutable ./minshell, il se print dans mon char **args qui récupère des arguments que je lui envoie par un read de 0.

J'aimerais comprendre pourquoi je n'obtiens pas la même chose dans ces 2 programmes (évidemment, quand il y a du rouge et du vert, c'est soit l'un, soit l'autre):

Programme_1 qui me print mon exécutable dans args.args et qui colle la commande par dessus (Ex: si j'entre ls, args.args[0] contient "lsminishell" et si j'entre rien, "./minishell")
Programme_2 qui fonctionne correctement (qui me print la commande que j'entre en argument dans args.args (Ex: Si j'entre rien args.args[0] contient rien, et si j'entre ls, args.args[0] contient "ls"))

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
void            my_malloc_args_tab(char **args char **(*args), int len, char *buffer)
{
  int           i;
  int           a;
  int           y;

  i = 0;
  a = 0;
  y = 0;
  args = malloc((len + 1) * sizeof(*args));

  while (buffer[i])
    {
      if (buffer[i] == ' ')
        i++;
      if (buffer[i] != ' ')
        {
          while ((buffer[i]) && (buffer[i] != ' '))
            {
              args[y][x] = buffer[i];
              i++;
              x++;
            }
          y++;
          x = 0;
        }
    }
}

void            my_malloc_args_tab(char **args, int len, (char **(*args), int *len char *buffer)
{
  int           i;
  int           a;
  int           y;


  i = 0;
  a = 0;
  y = 0;
  args = malloc((len + 1) * sizeof(*args));
  while (buffer[i])
    {
      if (buffer[i] == ' ')
        i++;
      if (buffer[i] != ' ')
        {
          while ((buffer[i]) && (buffer[i] != ' '))
            {
              i++;
              a++;
            }
          args[y] = malloc((a + 1) * sizeof(**args));
          args[y][a] = '\0';
          y++;
        }
      a = 0;
    }
  args[y] = '\0';
}


void            read_args(t_args *ptr)
{
  char          buffer[BUFF_SIZE];
  int           i;

  i = 0;
  ptr->nb_read = read(0, buffer, BUFF_SIZE);
  while (buffer[i] != '\n')
    i++;
  buffer[i] = '\0';
  len_args(&(ptr->len), buffer);
  my_malloc_args_tab(&(ptr->args), &(ptr->len), buffer);
  full_args_tab((ptr->args), buffer);
 my_malloc_args_tab(&(ptr->args), ptr->len, buffer);
  full_args_tab((ptr->args), buffer);
  i = 0;
  my_putchar('\n');
  my_putstr("Buffer contient:          ");
  my_putchar('[');
  my_putstr(buffer);
  my_putchar(']');
  my_putchar('\n');
  while (buffer[i])
    {
      buffer[i] = 0;
      i++;
    }
}
Merci de m'éclairer ! J'ai l'impression de découvrir une notion élémentaire !