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 :

strcpy () besoin d'un peu d'aide


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut strcpy () besoin d'un peu d'aide
    Bonjour a vous tous

    voici mon pb :

    je n'arrive pas extraire juste le jour en anglais de la chaine de caracteres retournée par la fonction ctime();

    voici mon code :

    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
    21
    int main ()
    {
            time_t date_eng;
            int i;
            char jour_eng[4];
     
            time ( &date_eng );
            printf ( "The date is: %s \n\n", ctime (&date_eng) );
            getch();
            // Affichage juste du jour de la chaine retournée par ctime ...
            for (i=0;i<3;i++){
                    printf("%c",ctime(&date_eng)[i]);
                    strcpy(jour_eng[i],ctime(&date_eng)[i]);
            }
            printf("\n Day : %s ",jour_eng);
            getch();
     
     
     
      return 0;
    }
    le probleme se situe au nveau du strcpy , cest la methode que jai trouvé pour extraire le jour mais pas moyen que ca marche

    merci davance cdlt

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    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 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pugebad Voir le message
    Bonjour a vous tous

    voici mon pb :

    je n'arrive pas extraire juste le jour en anglais de la chaine de caracteres retournée par la fonction ctime();

    voici mon code :

    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
    21
    int main ()
    {
            time_t date_eng;
            int i;
            char jour_eng[4];
     
            time ( &date_eng );
            printf ( "The date is: %s \n\n", ctime (&date_eng) );
            getch();
            // Affichage juste du jour de la chaine retournée par ctime ...
            for (i=0;i<3;i++){
                    printf("%c",ctime(&date_eng)[i]);
                    strcpy(jour_eng[i],ctime(&date_eng)[i]);
            }
            printf("\n Day : %s ",jour_eng);
            getch();
     
     
     
      return 0;
    }
    le probleme se situe au nveau du strcpy , cest la methode que jai trouvé pour extraire le jour mais pas moyen que ca marche

    merci davance cdlt
    Va revoir le synopsis de strcpy(). Cette fonction attend comme paramètre deux "char *" et toi tu lui passes deux "char". Ca pourra jamais marcher. C'est une fonction faite pour copier les string (elle possède son propre algo avec la boucle déjà toute faite) et toi, tu l'utilises pour copier des char dans une boucle de ta sauce qui est donc inutile
    Par ailleurs tu peux pas l'utiliser pour copier seulement "n" caractères car la fonction copie toute la chaîne source. Faut que tu passes par strncpy() à laquelle tu peux donner une limite à la copie...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strncpy(jour_eng, ctime(&date_eng), 3);
    jour_eng[3]='\0';   // (parce que strncpy() ne le met pas quand la limite est atteinte)
    Ou alors tu gardes ta boucle et tu copies tes caractères comme on copie n'importe quel élément simple en C => en utilisant le "="
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (i=0;i<3;i++){
                    printf("%c",ctime(&date_eng)[i]);
                    jour_eng[i]=ctime(&date_eng)[i];
            }
    jour_eng[3]='\0';   // parce qu'il faut le mettre là aussi
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Va revoir le synopsis de strcpy(). Cette fonction attend comme paramètre deux "char *" et toi tu lui passes deux "char". Ca pourra jamais marcher. C'est une fonction faite pour copier les string (elle possède son propre algo avec la boucle déjà toute faite) et toi, tu l'utilises pour copier des char dans une boucle de ta sauce qui est donc inutile
    Par ailleurs tu peux pas l'utiliser pour copier seulement "n" caractères car la fonction copie toute la chaîne source. Faut que tu passes par strncpy() à laquelle tu peux donner une limite à la copie...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strncpy(jour_eng, ctime(&date_eng), 3);
    jour_eng[3]='\0';   // (parce que strncpy() ne le met pas quand la limite est atteinte)
    Ou alors tu gardes ta boucle et tu copies tes caractères comme on copie n'importe quel élément simple en C => en utilisant le "="
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (i=0;i<3;i++){
                    printf("%c",ctime(&date_eng)[i]);
                    jour_eng[i]=ctime(&date_eng)[i];
            }
    jour_eng[3]='\0';   // parce qu'il faut le mettre là aussi
    peux tu me dire pourquoi on utilise :

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    edit : jai compris merci quand meme ...

    jai cependant une autre question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (strcmp(jour_eng,"Sat")==0)
                    jour="Sam";
    comment reussir a compiler cette ligne de code
    jai vraiment du mal jai essayer plein de syntaxe

    cdlt

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    oups , desole de faire le newbie noob , javais oublier la fonction strcpy
    desole pour le flood en passant

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    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 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pugebad Voir le message
    peux tu me dire pourquoi on utilise :
    Pour qu'un tableau de char soit une chaîne, il faut qu'il y ait le '\0'
    Si tu copies tes caractères un à un, ben il faut mettre en final ce '\0'
    Si tu utilises une fonction de copie de strings, la fonction le fait elle-même sauf dans le cas un peu particulier de "strncpy()" où le nombre de caractères demandé est atteint avant que la fonction ait fini de copier. Dans ce cas elle ne met pas le '\0' donc il te faut le mettre là aussi. Je pense que pour strncat() c'est pareil mais j'ai pas vérifié...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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 Sve@r Voir le message
    Je pense que pour strncat() c'est pareil mais j'ai pas vérifié...
    Non, justement, strncat() met toujours un 0. Par contre, il faut penser à initialiser correctement la chaine de destination avant l'appel .

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 836
    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 836
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Par contre, il faut penser à initialiser correctement la chaine de destination avant l'appel .
    Hé oui puisque la fonction a besoin de se caler sur la fin de la chaîne de destination pour y concaténer la nouvelle il lui faut impérativement trouver un '\0' dans ladite chaîne...

    Bon, content de savoir que strncat() met le '\0'. Pour quelle raison strncpy() ne le fait pas dans le cas que j'ai cité ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Tu pourrais affecter le retour de ctime() à une chaine et utiliser sscanf(chaine,"%d",&jour) pour récupérer le 1er entier de cette chaine qui ici sera le jour.

  10. #10
    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 Pugebad Voir le message
    le probleme se situe au nveau du strcpy , cest la methode que jai trouvé pour extraire le jour mais pas moyen que ca marche
    Normal, c'est pas fait pour. Essaye plutôt strncat(). Bien lire la doc, expérimenter...

    Mais pour résoudre ton problème initial, tu ferais mieux d'étudier les fonctions et structures de <time.h>
    • time()
    • struct tm
    • localtime()
    • etc.

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/01/2019, 15h00
  2. Besoin d'un peu d'aide
    Par Alexis35 dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 17/01/2012, 16h24
  3. Besoin d'un peu d'aide sur les pointeurs.
    Par techz dans le forum Débuter
    Réponses: 9
    Dernier message: 18/04/2009, 16h32
  4. besoin d'un peu d'aide
    Par etpaflechien dans le forum Langage
    Réponses: 1
    Dernier message: 13/04/2006, 10h38

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