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 :

tableau de char


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut tableau de char
    bonjour,

    pour des tests de comprehension, je manipule les chaine de caractères.
    j'ai donc un pointeur de char qui contient une valeur;

    Si je cherche a itéré le pointeur, j'affiche bien caractère par caractères.
    mais après itération si je veux affiché de nouveau ma chaine de caractère.
    j'ai plus rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    char *strBase = "Bouton numero ";
     
    while(*strBase){
         printf("\n%c", *strBase++);
        }
     
    printf("\nValeur de chaine: %s", strBase);
    merci

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Dans ton code le pointeur strBase sur la chaine de caractère est le seul moyen d'accéder à ta chaine de caractère. Il ne faut donc pas le perdre.
    Le mieux serait d'utiliser un pointeur temporaire que tu pourais modifier et de déclarer le pointeur strBase comme pointeur constant.

  3. #3
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    j'ai rien compris, mais pas grave !

  4. #4
    Membre chevronné
    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
    Points : 1 750
    Points
    1 750
    Par défaut
    Citation Envoyé par burndev Voir le message
    j'ai rien compris, mais pas grave !
    Ton pointeur strBase pointe à une adresse mémoire où se trouve la chaine "Bouton numero ".

    Dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(*strBase){
         printf("\n%c", *strBase++);
        }
    tu affiches la chaine lettre par lettre. Pour cela, tu augmente de 1 ton pointeur à chaque fois, ce qui est normal. Mais par conséquent il perd sa valeur d'origine.

    A la sortie de la boucle, ton pointeur pointe donc à la fin de la chaine, là où se trouve le caractère '\0' de fin de chaine, puisque tu sors de ta boucle par cette condition.

    Du coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("\nValeur de chaine: %s", strBase);
    n'affiche rien, car il n'y a plus rien à afficher.

    Si tu veux pouvoir afficher une seconde fois ta chaine, il faut mémoriser la valeur d'origine, et donc déclarer un deuxième pointeur.

    Tu peux faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    char *tmp , *strBase = "Bouton numero ";
     
    tmp = strBase;
    while(*tmp){
         printf("\n%c", *tmp++);
        }
     
    printf("\nValeur de chaine: %s", strBase);

  5. #5
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Citation Envoyé par burndev Voir le message
    j'ai rien compris, mais pas grave !
    Si un peu quand même !! C'est la base !!

    Il faut s'imaginer ce qu'il se passe en mémoire. C'est facile quand un prof t'explique avec un dessin, là ca va être plus compliqué.

    strBase est à l'adresse 1000.
    sur tu fais strBase++ tu passes à 1001, donc tu perds ton point de départ qui était 1000.

    PS : diogene vient à notre secours !!!

  6. #6
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut
    je vais essayer de faire le pedagogue, si je me plante ne vous moquez pas hein.
    bon tu as un pointeur strBase
    vois ce pointeur comme un numero de boite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *strBase=Bouton numero ";
    donc en decomposant ta chaine on l'adresse de ta chaine dans la memoire et un numero de caractere.
    ca donne le dessin suivant
    R:
    -0- -1- -2- -3- -4- -5- -6- -7- -8- --9- -10- -11- -12- -13- -14-
    [b] [o] -[u] -[t] -[o] [n] -[ ] -[n] [u] -[m] -[e] --[r] ---[o] --[ ] --[\0]
    les tirets c'est pour faire jolie sinon c'est pas alligne donc un charactere est delibite par '[' et ']'
    bon je vais pas t'embrouiller donc on suppose que l'adresse de depart de strBase c'est 0
    si tu dis imediatement d'afficher strBase il va afficher tout le texte.
    mais si tu fait
    strBass++; ou strBass+=1;
    ton strBase va bouger. allez un petit exemple suivit de dessin
    strBase++;
    strBase++;
    donc la tu vois que j'ai deplacer 2 fois donc le nouveau dessin donnera:
    R:
    -0- -1- -2- -3- -4- -5- -6- --7- -8- -9- -10- -11- -12-
    [u] -[t] -[o] [n] -[ ] -[n] [u] -[m] [e] -[r] -[o]- -[ ] - -[\0]
    si tu affiche strBase tu veras "uton numero "
    donc dans ton cas comme tu est allez jusqu'a la fin tu as eu:
    0
    [\0]
    donc quand tu affiches tu a rien car a la position 0 il y a un symbol qui dit a ta machine que c'est fini.

    ce que les autres te demande de faire c'est de demander a un autre pointeur de se deplacer a la place de strBase.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *strBase="bouton numero ";
    char *p=strBase
    et tu deplace plus jamais strBase mais p a sa place.
    si tu as deplace p trop de soit et que tu es perdu. et bien tu fais encore pour remetre p a la position de depart.

    si ca t'a pas aide bien attends diogene
    Petit lien vers mon premier jeux SDL2/C
    http://store.steampowered.com/app/72..._Soul_Of_Mask/
    la suite? ca vient,ca vient!

Discussions similaires

  1. decalage à gauche sur une tres grand tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/07/2005, 22h40
  2. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  3. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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