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 :

pointeur en lieu et place de tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut pointeur en lieu et place de tableau
    Salut,

    Une petite question :

    Je lis qu'on peut se passer d'un tableau pour initialiser une chaîne de caractères en déclarant directement un pointeur.
    Avec un tableau un caractère nul est placé automatiquement à la fin pour signaler la fin de la chaîne.

    Masi est-ce le cas quand on déclare un pointeur faisant office de début de chaîne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *message;
    message="bonjour";
    merci.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Peux-tu reformuler ta question.Parce que c'est flou ce que tu cherches à faire.

    C'est quoi un tableau de caractére nul ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut
    je parle du caractère nul qui se met à la fin automatiquement quand tu initialises une chaîne avec un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char tab[]="bonjour";
    est-ce que quand j'initialise une chaîne avec un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *message;
    message="bonjour";
    j'ai aussi un caractère nul '\0' qui se met automatiquement à la fin pour situer la fin de la chaîne ?

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    J'aurais tendance à le rajouter pour le second cas.Cependant il s'agit de 2 choses différentes. Dans le premier cas tu alloues bien la mémoire pour tout les caractères (dans la zone des variables automatiques) et dans le second cas tu as a faire à une chaine statique donc non modifiable,en lecture seule, qui est dans la zone des variables statiques.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut
    comment fais t'on alors pour rajouter un caractère nul "à la main", en avançant le pointeur et en entrant '\0' ?

    est-ce comme ci-dessous ?
    char *c="coco";
    *(c+4)='\0'; ou alors *(c+4)=0;

    Sinon je pensais que le nom d'un tableau était un pointeur constant donc non déplaçable, c'est donc pas le cas ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Ta chaine se termine bien par un '\0' dans tous les cas ("bonjour" est une constante dans les deux cas, l'affectation a une autre variable ne change pas sa valeur)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 51
    Par défaut
    ok, merci.

    Donc dans les deux cas ça se rajoute automatiquement.

    Sinon, pour placer un caractère nul à la main , on entre :

    0 ou '\0' ?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    *(str+taille) = '\0';
     
    // OU
     
    str[taille] = '\0';
    '0' est le caractère '0' (zéro) et '\0' est le caractère de fin de chaîne, c'est différent...

  9. #9
    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 gauguin
    je parle du caractère nul qui se met à la fin automatiquement quand tu initialises une chaîne avec un tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char tab[]="bonjour";
    est-ce que quand j'initialise une chaîne avec un pointeur :
    Ce que tu dis n'a aucun sens. Par contre, ce que tu fais après s'appelle
    "initialiser un pointeur avec une chaine"
    ou
    "faire pointer un pointeur sur une chaine."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *message;
    message="bonjour";
    j'ai aussi un caractère nul '\0' qui se met automatiquement à la fin pour situer la fin de la chaîne ?
    Oui. C'est garanti par le langage C.

    En fait "bonjour" est une chaine littérale. Elle a pour valeur l'adresse du premier élément d'un tableau de char anonyme (sans identificateur), non modifiable, contenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'b', 'o', 'n', 'j', 'o', 'u', 'r', 0};
    situé dans une zone mémoire à accès en lecture seule. Comme tu peux le constater, le tableau est bien terminé par un 0.

    Il est recommandé de qualifier le pointeur sur char avec const :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       char const *message;
       message = "bonjour";
    On peut aussi définir et initialiser en un seul gulp.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       char const *message = "bonjour";
    ce que je préfère...

    http://emmanuel-delahaye.developpez....es.htm#tabchar
    http://emmanuel-delahaye.developpez....aine_litterale

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/09/2008, 21h15
  2. pointeur sur un element d'un tableau
    Par kharg dans le forum Débuter
    Réponses: 5
    Dernier message: 11/03/2008, 22h48
  3. Réponses: 0
    Dernier message: 14/01/2008, 16h13
  4. Réponses: 6
    Dernier message: 25/11/2007, 17h59
  5. sortie en lieu et place d un fichier
    Par ZaaN dans le forum C++
    Réponses: 5
    Dernier message: 10/07/2007, 11h46

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