Partage
  • Partager sur Facebook
  • Partager sur Twitter

Attribuer une valeure à une variable de type char

Sujet résolu
    26 mars 2019 à 11:38:00

    J'aimerais savoir pourquoi dans ma structure je dois écrire :
    strcpy(joueurs[1].nom, "LIFE");
    strcpy(joueurs[1].prenom, "Take");
    joueurs[1].age  = 24;

    et non ?
    joueurs[1].nom = "LIFE";
    joueurs[1].prenom = "Take";
    joueurs[1].age  = 24;
    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2019 à 13:31:23

      C'est parce que joueurs[1].nom est un pointeur. Si tu n'es pas à l'aise sur ce qu'est un pointeur, je te conseille de lire le chapitre traitant des pointeurs (ou de juste admettre que c'est "mieux" d'utiliser strcpy, en attendant que tu apprennes ce qu'est un pointeur)

      Si tu fais joueurs[1].nom = "LIFE", tu dis : je veux que joueurs[1].nom pointe sur la chaine de caractère constante "LIFE"

      Si tu fais strcpy(joueurs[1].nom, "LIFE"), tu dis : je veux copier caractère par caractère le contenu de la chaine constante "LIFE", dans l'emplacement mémoire pointé par joueurs[1].nom. ça revient (fonctionnellement) à faire :

      const char *s = "LIFE";
      int i;
      for (i = 0 ; i < strlen(s); i++){
        joueurs[1].nom[i] = s[i];
      }

      L'approche sans strcpy est moins coûteuse (tu fais juste une affectation de pointeur au lieu de recopier tous les caractères un par un), par contre tu ne pourras pas modifier la chaine par la suite, par exemple si tu fais joueurs[1].nom[0] = 'G' pour écrire "GIFE", ça va planter parce que "LIFE" se situe dans un espace mémoire spécial réservé aux constantes, tu n'as pas le droit de le modifier.

      -
      Edité par potterman28wxcv 26 mars 2019 à 13:37:47

      • Partager sur Facebook
      • Partager sur Twitter

      Attribuer une valeure à une variable de type char

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown