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
    Points : 1
    Points
    1
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    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;
    }

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 1
    Points
    1
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Je dirais strncpy(), mais avec la même limitation : Tu devras là aussi, mettre le \0 toi-même.

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    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 sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    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.

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    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 expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    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