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 :

[Fonction]strcpy [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Attention. La taille de str2 est de 7 char, soit 6 + 1 (le 0 final). La chaine "Exemple" fait 7 + 1, soit 8 char.
    Je vois à peut près ce que vous voulez me faire comprendre et pourtant pour moi les deux chaînes font bien 8 «*char*» ou «*octets*»:
    strx[0], strx[1], strx[2], strx[3], strx[4], strx[5], strx[6], strx[7].
    D'ailleurs, j'obtiens bien la même longueur pour les deux tableaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /* Exemple4 */ 
     
    # include <stdio.h> 
     
    int main (void) 
    { 
        char str1[] = "Exemple", str2[7]=""; 
        printf("Avant copie de str1 dans str2:\n"); 
        printf("str1 contient: %s\n", str1); 
        printf("str2 contient: %s\n", str2);
        printf("Longueur de \"str1[]\": %d octets.\n", strlen(str1));
        printf("longueur de \"str2[]\": %d octets.\n", strlen(str2));
        strcpy (str2, str1); 
        printf("Apres copie de str1 dans str2:\n"); 
        printf("str1 contient: %s\n", str1); 
        printf("str2 contient: %s\n", str2);
        printf("Longueur de \"str1[]\": %d octets.\n", strlen(str1));
        printf("longueur de \"str2[]\": %d octets.\n", strlen(str2));
        return 0; 
    }
    Sortie:
    Avant copie de str1 dans str2:
    str1 contient: Exemple
    str2 contient:
    Longueur de "str1[]": 7 octets.
    longueur de "str2[]": 0 octets.
    Apres copie de str1 dans str2:
    str1 contient: Exemple
    str2 contient: Exemple
    Longueur de "str1[]": 7 octets.
    longueur de "str2[]": 7 octets.

    Que n'ais-je toujours pas compris? :-(

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    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 Lucky-94
    Que n'ais-je toujours pas compris? :-(
    Que strlen() n'a jamais servi a mesurer la taille d'un tableau, mais la longueur d'une chaine.

    La taille d'un tableau se mesure avec sizeof. Ajoute çà au début de ton code, et tu vas comprendre pourquoi ça ne fonctionne pas. :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        printf("Taille de \"str1[]\": %d octets.\n", (int) sizeof str1);
        printf("Taille de \"str2[]\": %d octets.\n", (int) sizeof str2);

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 154
    Par défaut
    Citation Envoyé par Lucky-94
    Citation Envoyé par Emmanuel Delahaye
    Attention. La taille de str2 est de 7 char, soit 6 + 1 (le 0 final). La chaine "Exemple" fait 7 + 1, soit 8 char.
    Je vois à peut près ce que vous voulez me faire comprendre et pourtant pour moi les deux chaînes font bien 8 « char » ou « octets »:
    strx[0], strx[1], strx[2], strx[3], strx[4], strx[5], strx[6], strx[7].
    Euh je crois que si tu définies strx[7], ça veut dire qu'il aura une taille de 7, de strx[0] à strx[6].

  4. #4
    Membre confirmé Avatar de Lucky-94
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 81
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Que strlen() n'a jamais servi a mesurer la taille d'un tableau, mais la longueur d'une chaine.
    Je pensais, faussement, étant donné qu'une chaîne de caractères est un tableau de caractères que cela produirait le même résultat.
    Alors que la bonne définition est: «*Une chaîne de caractères est un tableau de caractères terminé avec un caractère nul*».

    De plus la remarque:
    Citation Envoyé par Tellmarch
    Euh je crois que si tu définies strx[7], ça veut dire qu'il aura une taille de 7, de strx[0] à strx[6].
    Est totalement vrai, toute mes excuses.

    Je vous remercie tous pour votre patience et votre aide, en particulier Emmanuel.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. sur la fonction strcpy
    Par chettane dans le forum Débuter
    Réponses: 7
    Dernier message: 22/09/2011, 17h52
  2. fonction strcpy important
    Par aurélienutc dans le forum C
    Réponses: 3
    Dernier message: 17/04/2008, 21h30
  3. ecriture fonction strcpy
    Par gauguin dans le forum C
    Réponses: 10
    Dernier message: 19/02/2007, 23h38
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 12h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 21h07

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