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 :

Copie des 4 premiere lettre d'un tableau vers un autre


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut Copie des 4 premiere lettre d'un tableau vers un autre
    Bonjour, j'ai cherché dans la faq ainsi que dans le forum, mais je n'arrive pas à trouver la solution a mon probleme.

    J'ai un tableau de 6 caractères, et je souhaite copier uniquement les 4 premiers dans un tableau de 4 caractères. J'ai essayé memcpy, strncpy mais ca n'a pas l'air de convenir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include<stdio.h>
    #include<string.h>
     
    main(){
     
           char tab1[7]="TEST;5";
           char tab2[5];
           memcpy(tab2,tab1,sizeof(tab2));
           printf("%s",tab2);
           }
    ps : j'ai augmenté les 2 tableaux de 1 pour le caractère de fin de tableau mais sans bon résultats.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    avec sizeof(), memcpy() copiera toujours jusqu'au bout.
    Tu dois donc forcer toi-même le dernier caractère à \0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include<stdio.h>
    #include<string.h>
     
    int main(void)
    {
    char tab1[7]="TEST;5";
    char tab2[5];
    memcpy(tab2,tab1,sizeof(tab2));
    tab2[5-1] = '\0';
    printf("%s",tab2);
    return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut
    Merci ça marche impeccable, par contre je ne suis pas sur que ce que j'ai fais soit bien correcte d'utiliser memcpy. Y t-il une méthode plus propre?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Je dirais strncpy(), mais avec la même limitation : Tu devras là aussi, mettre le \0 toi-même.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    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 çakal
    Merci ça marche impeccable, par contre je ne suis pas sur que ce que j'ai fais soit bien correcte d'utiliser memcpy. Y t-il une méthode plus propre?
    strncat(), à condition qu'au moins le premier char du tableau de destination contienne 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include<stdio.h>
    #include<string.h>
     
    int main (void)
    {
       char const *tab1 = "TEST;5";
       char tab2[5];
     
       *tab2 = 0;
       strncat (tab2, tab1, 4);
       printf ("%s", tab2);
       return 0;
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Joli, et plus propre que strncpy() en effet.
    Simplement, j'aurais mis tab2[0] = '\0' à la place de *tab2 = 0 par soucis de clarté, mais ça donne la même chose de toute façon.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    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 Médinoc
    Joli, et plus propre que strncpy() en effet.
    Simplement, j'aurais mis tab2[0] = '\0' à la place de *tab2 = 0 par soucis de clarté, mais ça donne la même chose de toute façon.
    Je milite pour la préservation des claviers.(dit il en ajoutant une remarque inutile !)

  8. #8
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Ceci pourrait etre bien pratique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /* Copie nb caracteres de in dans out et rajoute toujours le \0 à la suite */
    #define MY_STRNCPY(out, in, nb) \
    	do { strncpy(out,in,nb); (out)[nb]='\0'; } while(0)

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2014, 01h12
  2. copie des données d'une vue d'une base à une autre
    Par sebac dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/07/2011, 11h47
  3. [XL-2007] Copie d'un tableau vers une autre feuille
    Par bob254 dans le forum Excel
    Réponses: 2
    Dernier message: 08/04/2010, 13h22
  4. Copie des classes d'un espace de travail vers un autre
    Par ikramta dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/08/2009, 16h08
  5. [VBA-E]copie spéciale d'un tableau vers un autre
    Par gojira dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2006, 16h21

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