Salut,
Dans les exemples et FAQ du C je trouve le code suivant pour supprimer tous les espaces d'une chaîne de caractères :
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
 
char* supprime (const char *src)
{
  char *dest = NULL, *res;
  int n = strlen (src);
  int i, dansunmot, j = 0;
 
  dest = malloc (n+1);
  if(dest == NULL)
  {
    return NULL;
  }
 
  /* Cherche le premier non espace */
  i = 0;
  while ((i < n) && (src[i] == ' '))
  {
    i++;
  }
 
  /* On est dans un mot */
  dansunmot = 1;
 
  /* Jusqu'a la fin de la chaine */
  while (i < n)
  {
    /* Si c'est un espace, on fait remarquer qu'on n'est plus dans un mot */
    if (src[i] == ' ')
    {
      dansunmot = 0;
    }
    else 
    {
      /* Si on n'est pas dans un mot, on met un espace */
      if (dansunmot == 0)
      {
        dest[j]=' ';
        j++;
      }
      /* On est dans un mot */
      dansunmot = 1;
      /* On copie la lettre */
      dest[j] = src[i];
      /* On incremente l'indice de destination */
      j++;
    }
    /* On incremente l'indice de la source */
    i++;
  }
 
  /* Mettre le '\0' a la fin */
  dest[j] = '\0';
  j++;
 
  /* On realloue pour avoir la bonne taille */
  res = realloc (dest, j);
  if (res)
  {
    return res;
  }
  else
  {
    return dest;
  }
}
A vrai dire je demande si un code comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
char * str_pack_char( char * z , short c )
{ char * s = z ;
  char * str = s  ; 
  if ( z != NULL )
  {
    while( *z )
    { if( *z != c ) *s++ = *z ;
      z++;
    }
   *s = '\0' ;
  } 
  return str ; 
}
ne ferait pas mieux ?
Mais bon la chaîne rétrécit mais pas son espace mémoire ...