Bonjour,

je suis en train de coder une fonction qui supprime tout les espaces en double d'une chaîne de caractères.
Par exemple, si ma chaîne de caractère est :
« bonjour                    je                   suis                    un                       test »
je souhaite que le résultat soit :

« bonjour je suis un test »"


Voila ma fonction mais j'ai pas mal de soucis. j'ai des invalid read quelques fois avec valgrind.
Pouvez-vous m'aider ?

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
char    *delete_space(char *buff)
 {
   int   i;
   int   z;
   int   c;
   int   space;
   char  *tmp;
 
   tmp = NULL;
   i = -1;
   space = 0;
   z = 0;
   c = 0;
   tmp = malloc(sizeof(char) * (strlen(buff) + 1));
   memset(tmp, '\0', strlen(buff) + 1);
   while (buff[++i] != '\0')
     {
       if (buff[i] != ' ' && buff[i] != '\t')
         c++;
       space = 0;
       while ((buff[i] == '\t' || buff[i] == ' ') && buff[i] != '\0')
         {
           space++;
           i++;
         }
       if (buff[i] != '\0' && space > 0 && c > 0)
         {
           tmp[z] = ' ';
           z++;
         }
       tmp[z] = buff[i];
       z++;
     }
   return (tmp);
 }