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 :

différence entre char a[20]="str" et char *a="str"


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 33
    Points
    33
    Par défaut différence entre char a[20]="str" et char *a="str"
    Bonjour,

    Petite question:

    quelle est la différence entre

    et
    J'ai compris que a[20] alloue 20 cases en mémoire en gros et que *a="chaine" alloue juste les cases qu'il faut (si je ne me trompe pas).

    Mais y a t'il une différence au niveau des pointeurs?
    avec a[20]="chaine", a pointe sur le premier caractère "c", mais avec *a="chaine", c'est pareil?

    merci!

  2. #2
    Membre habitué Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Points : 190
    Points
    190
    Par défaut
    Ce que fait char * a = "chaine" ; :
    Quand le compilateur traite cette ligne, il ajoute dans son segment de données 7 octets qui contiennent "chaine\0" puis, il créé un pointeur (4 octets) a qui pointe sur le premier de ces 7 octets.
    En principe le segment de données est en lecture seule.
    Ce qui signifie que a[4] = 's' ; va provoquer une erreur à l'exécution (segmentation fault ou équivalent).
    En fait, il faut écrire const char * a = "chaine" ;

    Ce que fait char a [7] = "chaine" ; :
    Le compilateur créé une variable a de 7 octets et l'initialise avec la chaîne "chaine\0".
    A ce propos, note que tu dois compter les caractères et ajouter 1 pour le '\0' terminal. Mais il y plus simple :
    char a [] = "chaine" ;
    qui fait la même chose mais le calcul est fait par le compilateur.

    Voila.

  3. #3
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    L'un (le tableau) contient la chaîne de caractère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c[3] = { 'a', 'b', 'c'}
    L'autre pointe vers la chaîne de caractère, c'est à dire contient l'adresse mémoire de cette chaîne de caractère.

    où c == 0x...

    Il y a un joli schéma au début de chapitre 5 du K&R qui permet de bien comprendre la différence.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup j'ai compris!

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 732
    Points : 31 056
    Points
    31 056
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Gnux Voir le message
    L'un (le tableau) contient la chaîne de caractère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c[3] = { 'a', 'b', 'c'}
    N'oublie pas le '\0' sinon ce n'est pas une chaine...

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

Discussions similaires

  1. Différence entre %STR et %QUOTE
    Par fafabzh6 dans le forum Macro
    Réponses: 10
    Dernier message: 14/03/2011, 17h43
  2. Différence entre char &r='c' et char r='c'
    Par deubelte dans le forum C++
    Réponses: 49
    Dernier message: 09/03/2010, 17h50
  3. différence entre int et char
    Par hassiba_45 dans le forum C++
    Réponses: 4
    Dernier message: 12/06/2008, 21h53
  4. [Free Pascal] Mini-tutoriel : Différence entre char et chr (auto-analyse de code)
    Par Clandestino dans le forum Free Pascal
    Réponses: 14
    Dernier message: 24/03/2007, 18h18

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