IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

prob erreur ((*temp).*suivant).suivant;


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut prob erreur ((*temp).*suivant).suivant;
    Bonjour,

    Encore une erreur sur les pointeurs :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct repertoire
    {
    	char adresse[TAILLE_UN_FICHIER];
    	struct repertoire *suivant;
     
     
    };
    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
    char del_rep(struct repertoire **rep_courant,char rep_to_del[TAILLE_UN_FICHIER])
    {
    	//DECLARATION TEMP
    	struct repertoire *temp_adr;
    	struct repertoire *temp;
    	temp = (struct repertoire*) malloc(sizeof(struct repertoire));
    	temp = *rep_courant;
    	//ON VERIFIE QUE C PAS LA PREMIER
    	if (strcmp((*temp).adresse ,rep_to_del))//c'est le premier
    	{
    		*rep_courant = (*temp).suivant;
    		free(temp);
    		return 1;
    	}
    	//ON BOUCLE POUR TROUVER LE TEMP QUI PRECEDE CE QU'ON CHERCHE
    	do{
    		temp = (*temp).suivant;
    	}while (!strcmp(((*temp).*suivant).adresse,rep_to_del) && (*temp).suivant != NULL);//si suivant ne contient pas l'adresse, ou si ce n'est pas la fin la fin
    	//ON A TROUVE OU NULL
    	if ((*temp).suivant != NULL)
    	{
    		temp_adr = ((*temp).*suivant).suivant;
    		free((*temp).suivant);//on del le suivant
    		(*temp).suivant =temp_adr;
    		return 1;
    	}
    	else
    	{
    		return 0;
    	}
    	
    }
    Je suis en train de chercher sur le web, mais je ne trouve pas d'exemple y ressemblant. Donc si je trouve d'ici là je le signale mais sinon je comprends pas, logiquement j'ouvre un pointeur de type structure qui contient un pointeur que j'ouvre pour optenir l'adresse du pointeur de la structure

    Ah oui, il me met une syntaxte error avant '*'...
    j'ai essayé (*temp).(*suivant).adresse, mais ça ne marche pas plus. :s

    Merci d'avance de m'aider un peu...

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par janor Voir le message
    Encore une erreur sur les pointeurs :s
    <...>
    Ah oui, il me met une syntaxte error avant '*'...
    j'ai essayé (*temp).(*suivant).adresse, mais ça ne marche pas plus. :s
    Déjà, la syntaxe officielle pour accéder à un élément d'une structure pointée, c'est -> : p->element.

    Ça devrait considérablement simplifier ton codage et retirer automatiquement certaines erreurs de syntaxes trop complexes.

    Toujours rechercher la simplicité.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut
    Effectivement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ((temp)->suivant)->suivant
    fonctionne, mais j'aurai bien aimé comprendre où était l'erreur, car '->' n'est t'il pas une facilité du langage ?

    si *var.element <-> var->element
    où est l'erreur ?

    Merci en tout cas

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    si *var.element <-> var->element
    non, à cause de la priorité des opérateurs : (*var).element n'est pas pareil que *var.element.

    ((*temp).*suivant).suivant;
    où est l'erreur ?
    (*(*temp).suivant).suivant est identique à (temp->suivant)->suivant soit encore à temp->suivant->suivant.

    EDIT: modif petite erreur

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut
    Citation Envoyé par jeroman Voir le message
    non, à cause de la priorité des opérateurs : (*var).element n'est pas pareil que *var.element.

    (*(*temp).suivant)).suivant est identique à (temp->suivant)->suivant soit encore à temp->suivant->suivant.
    Oki, merci beaucoup !!!
    J'étais pourtant persuadé d'avoir testé cette possibilité, mais j'avais dut laisser une erreur.

    C'est si difficile d'écrire des choses simples ? Ca fait peur ou quoi ?
    ...
    Je ne sais pas et je ne veux pas le savoir. Si il existe des 'facilités' dans le langage, c'est justement pour éviter de faire des erreurs. Les choses inutilement complexes ne m'intéressent pas.

    Il y a 40.000 façons de compliquer le code C. En tant que formateur, je ne m'intéresse qu'à celles qui le rendent clair.
    Oui je comprends, mais comme les pointeurs je veux bien les comprendre, je préfère rester dans des notations simples avec '*' plutôt que d'utiliser des simplifications, qui m'embrouillent car ne sont plus dans la même continuité que le '*'.

    Déjà avec les tableaux, ça m'a laissé un grave problème existentiel avant que je comprenne qu'en fait c'était des pointeurs.

    Une fois que ça sera bien clair, j'utiliserai les facilitées.

    Désolé c'est dans ma nature de vouloir comprendre le fondement parfaitement avant d'avancer. Mais merci beaucoup à vous deux. Je vais méditer sur cette solutions.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 35
    Par défaut Pour ceux qui ont eu le même problème
    En fait il fallait interpréter le problème comme ça:

    temp_adr = (*(*temp).suivant).suivant;
    ici, on ouvre le pointeur temp, puis on ouvre le pointeur (*temp).suivant et on récupérère l’adresse.

    et non pas

    temp_adr = ((*temp).*suivant).suivant;// FAUX

    ici, on ouvre le pointeur temp, puis on ouvre le pointeur *suivant (suivant n'existe pas indépendamment de temp ) et on récupère l’adresse.

    Pour ceux qui rencontreraient le même problème que moi....

    Après coup, c'est vrai que c'est logique

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par janor Voir le message
    Oui je comprends, mais comme les pointeurs je veux bien les comprendre, je préfère rester dans des notations simples avec '*' plutôt que d'utiliser des simplifications, qui m'embrouillent car ne sont plus dans la même continuité que le '*'.
    Je vois. Tu préfères *(tab + i) à tab[i] et &tab[i] à tab + i ...

    Ben, chacun ses gouts, mais plus c'est simple, pour moi, mieux c'est...

    Tu sais l'écrire avec un tableau à 2 dimensions ?

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par janor Voir le message
    Effectivement,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ((temp)->suivant)->suivant
    fonctionne,
    SIMPLICITE
    C'est si difficile d'écrire des choses simples ? Ca fait peur ou quoi ?
    mais j'aurai bien aimé comprendre où était l'erreur, car '->' n'est t'il pas une facilité du langage ?

    si *var.element <-> var->element
    où est l'erreur ?
    Je ne sais pas et je ne veux pas le savoir. Si il existe des 'facilités' dans le langage, c'est justement pour éviter de faire des erreurs. Les choses inutilement complexes ne m'intéressent pas.

    Il y a 40.000 façons de compliquer le code C. En tant que formateur, je ne m'intéresse qu'à celles qui le rendent clair.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Erreur d'encodage suivant la possition de l'ECHO
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 22/05/2013, 15h17
  2. [prob] erreur script news
    Par Invité dans le forum 1&1
    Réponses: 1
    Dernier message: 30/08/2012, 00h22
  3. [AC-2003] Erreur accès enregistrement suivant
    Par twitzig dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2011, 18h53
  4. Erreur sur OpenFileDialog suivant framework
    Par ramoud dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/03/2009, 17h14
  5. [c++]prob de temps
    Par torNAdE dans le forum C++
    Réponses: 3
    Dernier message: 19/10/2006, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo