Bonjour,

J'ai une erreur à cette ligne : error: invalid operands to binary *

Code : Sélectionner tout - Visualiser dans une fenêtre à part
TestRealloc = (char *)realloc( TestRealloc, (*LongueurNouvelleChaine+1)*sizeof(char) );
Je ne comprends pas pourquoi il braille ici !

et aussi à cette ligne : error: array subscript is not an integer

Code : Sélectionner tout - Visualiser dans une fenêtre à part
(*NouvelleChaine)[*LongueurNouvelleChaine] = Chaine[i];
Pourtant LongueurNouvelleChaine est bien de type int.

On dit qu'il faut initialiser les pointeurs à null puis les tester ensuite.
Il faut tester uniquement si on a fait une allocation mémoire pour vérifier le retour de l'allocation ?


Voici le code en entier :

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
#include <stdio.h>
#include <stdlib.h>
 
int LongueurChaine( char *Chaine );
void SupprimerOccurenceDansChaine( char *Chaine, int LongueurChaine, char **NouvelleChaine, int **LongueurNouvelleChaine, char Occurrence );
 
int main()
{
    char *Chaine="bonjour";
    printf("\n\n Longueur de \"%s\" = %d", Chaine, LongueurChaine( Chaine ) );
 
    int  *NouvelleLongueur;
    char *NouvelleChaine  ;
 
    SupprimerOccurenceDansChaine( Chaine, LongueurChaine( Chaine ), &NouvelleChaine, &NouvelleLongueur, 'b' );
 
    int i;
    for ( i=0 ; i<*NouvelleLongueur ; i++ )
        {
            printf("%c", NouvelleChaine[i]);
        }
 
    free(Chaine);
    free(NouvelleLongueur);
    free(NouvelleChaine);
    return 0;
}
 
int LongueurChaine( char *Chaine )
{
    int Longueur = 0;
 
    while ( *Chaine != '\0' )
          {
              Longueur++;
              Chaine++;
          }
 
    return Longueur;
}
 
void SupprimerOccurenceDansChaine( char *Chaine, int LongueurChaine, char **NouvelleChaine, int **LongueurNouvelleChaine, char Occurrence )
{
    *NouvelleChaine         = NULL;
    *LongueurNouvelleChaine = NULL;
 
    *LongueurNouvelleChaine = (int *)malloc( sizeof( int ) );
    *LongueurNouvelleChaine = 0;
 
    char *TestRealloc = NULL;
 
    if ( Chaine != NULL && NouvelleChaine != NULL && LongueurNouvelleChaine != NULL )
       {
           int i;
           for ( i=0 ; i<LongueurChaine ; i++ )
               {
                   if ( Chaine[i] != Occurrence )
                      {
                          TestRealloc = (char *)realloc( TestRealloc, (*LongueurNouvelleChaine+1)*sizeof(char) );
 
                          if ( TestRealloc != NULL )
                             {
                                  *NouvelleChaine                           = TestRealloc;
                                 (*NouvelleChaine)[*LongueurNouvelleChaine] = Chaine[i];
                                  *LongueurNouvelleChaine                   = *LongueurNouvelleChaine + 1;
                             }
 
                        else {
                                 *NouvelleChaine         = NULL;
                                 *LongueurNouvelleChaine = 0;
                             }
                      }
               }
       }
 
    else printf("ERREUR");
 
    free(TestRealloc);
}