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

Fermé
oliver91 Messages postés 51 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 - 22 mai 2007 à 07:47
Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 - 22 mai 2007 à 11:29
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
22 mai 2007 à 08:31
Salut
Pourquoi tu as "2-ProdTab[i];" après le strstr ??
0
oliver91 Messages postés 51 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 3
22 mai 2007 à 08:38
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
22 mai 2007 à 09:43
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 lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 3
22 mai 2007 à 10:37
/*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 lundi 21 mai 2007 Statut Membre Dernière intervention 9 septembre 2009 3
22 mai 2007 à 10:38
/*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 jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
22 mai 2007 à 11:14
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
22 mai 2007 à 11:23
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 jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
22 mai 2007 à 11:29
Ah en effet autant pour moi :)

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