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 :

Retour de STRCHR, STRSTR [Débutant(e)]


Sujet :

C

  1. #1
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut Retour de STRCHR, STRSTR
    Bonjour,

    J'essai de manipuler des chaines des caratères à l'aide de fonctions type STRCHR, STRSTR, est j'ai un peu de mal à comprendre comment manipuler le retour de ces fonctions.

    La fonction STRCHR me retourne bien la partie de chaine recherchée.
    Si j'ai bien lu la description de la fonction, STRCHR , elle renvoi un pointeur vers la première occurance du caractère recherché.
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RCPC = strchr(Record,'\'');
    Ma question porte sur l'adresse de cette première occurance.
    si je fais le printf ce RCPC suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC:  %p\n",&RCPC);
    je récupére l'adresse du pointeur RCPC , mais comment récupérer l'adresse de l'occurance trouvé ?

    car un ce printf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC:  %s\n",RCPC);
    me donne la chaine à parir de cette occurance jusqu'au \0 (normal..)
    J'ai bon relire le chapitre sur les pointeur, je tourne en rond...... J'ai du louper quelque chose mais je vois pas quoi, pourriez vous m'éclairer ?
    Merci

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Si RCPC est déclaré comme ceci :
    alors il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("RCPC:  %p\n", RCPC);

  3. #3
    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 SPACHFR
    J'essai de manipuler des chaines des caratères à l'aide de fonctions type STRCHR, STRSTR,
    Pas du C. Je suppose que tu parles de strchr() et strstr().
    est j'ai un peu de mal à comprendre comment manipuler le retour de ces fonctions.

    La fonction STRCHR me retourne bien la partie de chaine recherchée.
    Si j'ai bien lu la description de la fonction, STRCHR , elle renvoi un pointeur vers la première occurance du caractère recherché.
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RCPC = strchr(Record,'\'');
    Ma question porte sur l'adresse de cette première occurance.
    si je fais le printf ce RCPC suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC:  %p\n",&RCPC);
    je récupére l'adresse du pointeur RCPC , mais comment récupérer l'adresse de l'occurance trouvé ?

    car un ce printf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC:  %s\n",RCPC);
    me donne la chaine à parir de cette occurance jusqu'au \0 (normal..)
    J'ai bon relire le chapitre sur les pointeur, je tourne en rond...... J'ai du louper quelque chose mais je vois pas quoi, pourriez vous m'éclairer ?
    Ce que tu as loupé, c'est que le contenu d'un pointeur est une adresse. Si tu tiens à afficher le contenu du pointeur, tu peux utiliser printf() avec "%p" et faire un cast en (void *) comme l'exige la norme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("adresse de RCPC:  %p\n", (void*) RCPC);
    mais l'intérêt est limité...

  4. #4
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    Mon pointeur ést correctement déclaré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *RCPC = NULL;
    J'ai fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC  p    :  %p\n",RCPC);
    cela me donne bien une adresse : 122242E9
    Pour accéder au contenu de l'adresse j'ai codé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC     :  %c\n",*RCPC);
    Je récupére bien le premier caratères, mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC     :  %c\n",*RCPC+1);
    le caractère affiché n'est pas celui attendu (??) les données ne suive pas en mémoire ou ma syntaxe est incorrecte ou mon raisonnement ?

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Les opérations mathématiques sont SUR LES POINTEURS, par sur le contenu...

    Donc si tu fais :

    Citation Envoyé par SPACHFR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC     :  %c\n",*RCPC+1);
    c'est n'importe quoi, ou plutot la valeur ascii contenue dans RCPC plus un.

    Mais ce que tu veux c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("RCPC     :  %c\n",*(RCPC+1) );

  6. #6
    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 SPACHFR
    Mon pointeur ést correctement déclaré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *RCPC = NULL;
    J'ai fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC  p    :  %p\n",RCPC);
    cela me donne bien une adresse : 122242E9
    Non. Le comportement est indéterminé. Il faut le (void*). Je l'avais pourtant bien précisé. Si tu ne tiens pas compte des avis donnés, c'est pas la peine de demander de l'aide, on perd notre temps...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("RCPC     :  %c\n",*RCPC+1);
    le caractère affiché n'est pas celui attendu (??) les données ne suive pas en mémoire ou ma syntaxe est incorrecte ou mon raisonnement ?
    La syntaxe est erronée. On commence par calculer l'adresse :
    puis on déréference cette adresse :
    mais c'est une façon compliquée d'écrire

  7. #7
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    Désolé pour la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("adresse de RCPC:  %p\n", (void*) RCPC);
    J''essayai juste d'utiliser la syntaxe qui me semblais la plus simple à lire, n'étant pas familliarisé avec les casts (d'ailleurs je vais chercher car honnêtement ce ne sais pas ce que cela veut dire).

    Merci à vous pour avoir pris le temps de repondre à mes intérrogations, c'est assimilé.

    Ce qui est un peu déroutant, c'est le nombre de syntaxes différentes pour arriver au même résultat... bref la route est encore longue, mais je ne descendrai pas du train.

    Merci

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Retour au mode texte par défaut
    Par coca dans le forum x86 16-bits
    Réponses: 6
    Dernier message: 12/12/2002, 17h22
  3. [XP] Retour d'experience
    Par virgile04 dans le forum Méthodes Agiles
    Réponses: 10
    Dernier message: 22/10/2002, 08h25
  4. Retour chariot dans un TMemo ?
    Par Vincent PETIT dans le forum C++Builder
    Réponses: 7
    Dernier message: 27/08/2002, 18h55
  5. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47

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