[C] Déplacement dans un tableau dynamique ...

Bonjour,

Je ne comprends pas pourquoi cette partie de code ne fonctionne pas :

j=strstr(Tab[i],"->")+2-ProdTab[i];

En fait, je cherche à faire une recherche dans le tableau Tab[i] (tableau dynamique à 2 dimensions) afin de me placer dans le tableau après le "->" afin de pouvoir copier les caractères qui suivent ...

Merci de votre aide.

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Salut
    Pourquoi tu as "2-ProdTab[i];" après le strstr ??
    1. En fait, sauf erreur de ma part (ce qui serait fort possible !), strstr retourne l'adresse de la 1ere occurence de la chaine "->" ... en faisant -Tab[i] je pense obtenir l'indice dans le tableau auquel se trouve le '-' donc en faisant +2, je pense me trouver sur le caractère qui suit la chaine "->" ... non ?
      1. Contributeur
        Beh oui ça marche. Enfin après tout dépend de ta déclaration dynamique de ton tableau. Et pourquoi tu as fait - ProdTab[i] et pas -Tab[i] ?
        Peux-tu poster la déclaration de ton tableau, avec son initialisation des chaines de caractères ?
        1. /*Récupération du tableau de productions*/
              ProdTab=(char**)malloc(cmptn*sizeof(char*));
              for(i=0;i<tailleficP;i++){
                  if(ProdTabInt[i]!='\n'){
                      cmptc++;
                  }else{
                      ProdTab[j]=(char*)malloc((cmptc+1)*sizeof(char));
                      for(k=0;k<cmptc;k++){
                          ProdTab[j][k]=ProdTabInt[MemCmpt+k];
                      }
                      ProdTab[j][k]='\0';
                      
                      
                      MemCmpt=MemCmpt+cmptc+1;
                      cmptc=0;
                      j++;
                  }
              }
          1. /*Création dun tableau contenant la 2e partie des prod*/
                T2=(char***)malloc(cmptn*sizeof(char**));
                for(i=0;i<cmptn;i++){
                    for(j=strstr(ProdTab[i],"->")+2-ProdTab[i];j<strlen(ProdTab[i]);j++){
                        if(ProdTab[i][j]==' '){cmpte++;
            			}
                    }
                    T2[i]=(char**)malloc((cmpte+1)*sizeof(char*));
                    for(j=strstr(ProdTab[i],"->")+2-ProdTab[i];j<strlen(ProdTab[i]);j++){
                        if(ProdTab[i][j]!=' '){
                            cmptm++;
                        }
                        T2[i][j]=(char*)malloc((cmptm+1)*sizeof(char));
                        T2[i][j][k]=ProdTab[i][j];
                        T2[i][j][cmptm]='\0';
                    }
                }
            1. Salut,

              Ton erreur se situe au niveau de la variable de retour de strstr, en fait ca te renvoie un pointeur, et non la case [j] dans le tableau.

              Par exemple si tu fais un char * j, tu pourras afficher ta chaine recherchée en faisant
              printf("%s",j);
              1. Contributeur
                Oui, mais il a fait - Tab[i]. Cette différence permet de récupérer l'indice voulu.
            2. Ah en effet autant pour moi :)

              Je viens de tester ça marche bien.. C'est quoi l'erreur chez toi ?