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 :

pourquoi on utilise pas le & en lecture d'une chaine de caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Par défaut pourquoi on utilise pas le & en lecture d'une chaine de caractère
    salut les devloppeurs
    j'ai une question simple et directe:
    pour quoi à la lecture d'une chaine de caractére le & n'est pas utilisé??
    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Tu parles certainement de l'utilisation du scanf("%s',buffer).
    L'esperluette que l'on place devant une l-value, permet de fournir l'adresse de l'élément. scanf comme toutes les fonction ne peut modifier une variable qu'en utilisant l'adresse.
    Quand on a à faire à un tableau, le nom du tableau est automatiquement compris comme l'adresse du premier élément, et c'zst zxactement ce dont on a besoin. Mais on peut aussi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf( "%s" , &buffer[0] );

  3. #3
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 464
    Par défaut
    je savais que le & est utilisé pour l'adresse mais est ce que ca s'utilise pour recupérer l'adresse allouée à la variable(lors de sa déclaration) ou bien le & permet d'allouer une case mémoire???

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Bonsoir,
    Le « & », en C, n'alloue rien du tout. Quand il est utilisé comme préfixe d'un identifiant, il sert à obtenir l'adresse en mémoire de l'objet concerné. C'est utile quand on veut remplir cet objet avec une donnée, comme dans le cas de scanf().

    Lorsque tu lis une chaîne de caractères, la fonction doit déposer celle-ci dans une suite d'octets consécutifs réservés à cet effet. Et le meilleur moyen de faire cela est de déclarer un tableau, par exemple avec char buffer[256];.

    Or, invoquer le nom de tableau seul (ici buffer) renvoie justement l'adresse en mémoire de ce tableau (et est donc ici une expression de type char *). Et c'est précisément parce cet identifiant est de type pointeur que tu peux l'indexer avec des crochets « [ ] » et accéder à ses éléments. Par conséquent, tu n'as pas besoin de demander explicitement l'adresse du tableau avec « & » puisque l'identifiant te le renvoie déjà.

    À noter que, du coup, les expressions « buffer » et « &buffer » sont équivalentes si buffer est un tableau, et renvoient donc la même information. Ce serait différent si buffer était un pointeur déclaré comme tel et qui pointait un espace libre en mémoire : la première renverrait la valeur du pointeur, donc l'emplacement de l'espace libre, ce qui est ce que l'on cherche, alors que l'autre renverrait l'emplacement du pointeur lui-même, qui se ferait alors écraser par la lecture de la chaîne, lecture qui au passage écraserait aussi tout ce qui se trouve à côté.

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

Discussions similaires

  1. lecture d'une chaine de caractére
    Par oliv27400 dans le forum MATLAB
    Réponses: 4
    Dernier message: 01/06/2010, 09h29
  2. utiliser test pour vérifier la syntaxe d'une chaine de caractere ?
    Par italiasky dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/04/2007, 15h41
  3. lecture d'une chaine de caractères
    Par freestyler dans le forum C#
    Réponses: 2
    Dernier message: 01/03/2007, 17h20
  4. Réponses: 3
    Dernier message: 26/12/2006, 09h13
  5. Lecture d'une chaine de caractère avec fgets
    Par mayoouketchup dans le forum Langage
    Réponses: 9
    Dernier message: 22/12/2005, 16h17

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