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

oliver91 Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   -  
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

7 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut
Pourquoi tu as "2-ProdTab[i];" après le strstr ??
0
oliver91 Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   3
 
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 ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 ?
0
oliver91 Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   3
 
/*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++;
        }
    }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oliver91 Messages postés 51 Date d'inscription   Statut Membre Dernière intervention   3
 
/*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';
        }
    }
0
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
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);
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Oui, mais il a fait - Tab[i]. Cette différence permet de récupérer l'indice voulu.
0
Stupeflip Messages postés 391 Date d'inscription   Statut Membre Dernière intervention   94
 
Ah en effet autant pour moi :)

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