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 strftime - Erreur de segmentation


Sujet :

C

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut Fonction strftime - Erreur de segmentation
    Bonjour,
    J'ai écrit le code suivant sous Linux Ubuntu (&gedit) :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    #include <stdio.h>
    #include <time.h>
     
    main()
    {
       struct vol {
                 char num_vol[10];
                 char ville_dep[30];
                 char ville_des[30];
                 struct tm timeinfo;
                 };
     
    struct vol voyage;
    int remplir;
     
    FILE *entree;
    entree = fopen("liste_vols", "a");
     
      		printf("Entrer numéro vol : ");
    		    scanf("%s", voyage.num_vol);
    		printf("Entrer ville départ : ");
    		    scanf("%s", voyage.ville_dep);
    		printf("Entrer ville destination : ");
    		    scanf("%s", voyage.ville_des);
    		printf("Entrer jour : ");
    		    scanf("%d", &remplir);
                        voyage.timeinfo.tm_mday = remplir;
    		printf("Entrer mois : ");
                    scanf("%d", &remplir);
                        voyage.timeinfo.tm_mon = remplir-1;
                    printf("Entre rannée : ");
                    scanf("%d", &remplir);
                        voyage.timeinfo.tm_year = remplir-1900;
    		printf("Entrer heure : ");
    		scanf("%d", &remplir);
                        voyage.timeinfo.tm_hour = remplir;
    		printf("Entrer minutes : ");
    		scanf("%d", &remplir);
                        voyage.timeinfo.tm_min = remplir;
     
    		fprintf(entree, "%s %s %s %d %d %d %d\n", voyage.num_vol, voyage.ville_dep, voyage.ville_des, voyage.timeinfo.tm_mday, voyage.timeinfo.tm_mon, voyage.timeinfo.tm_hour, voyage.timeinfo.tm_min);
     
    fclose(entree);
     
    char format[128];
    strftime(format, 128, "%c\n", &voyage.timeinfo);
    printf("%s\n", format);
    }
    Je teste le jeu de données suivant :
    Num vol : 00001
    De : Paris
    A : Bordeaux
    Jour : 25
    Mois : 03
    Heure : 15
    Minutes : 30

    ça compile, le système m'invite à saisir mes données.
    Sauf qu'à la fin j'ai une erreur de segmentation et je suis quasi sure que c'est au niveau de la strftime.
    Y a une coquille quelque part mais je n'arrive pas à voir laquelle...

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je ne vois rien d'anormal, si ce n'est que le champ année (tm_year) de la structure tm n'a pas été initialisé.

    (Vérifier tout de même que l'ouverture du fichier a été correctement faite et que entree, qui est en fait une sortie!, est différent de NULL. On doit toujours vérifier que les ouvertures de fichiers se sont bien passées)

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 684
    Points
    13 684
    Billets dans le blog
    1
    Par défaut
    J'ai essayé avec CodeBlocks sous XP, pas de soucis de ce genre. Tu peux utiliser le mode pas a pas de ton débogueur pour savoir quelle ligne exactement crash.


    J'ai constaté que :
    • la validité des données n'est pas vérifiée (j'ai pu entrer un mois = 21)
    • l'année s'affiche toujours égale à 25

  4. #4
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Salut,

    en plus de l'année tu peux faire un appel à mktime qui va normaliser ton struct tm :

    time_t mktime (struct tm *brokentime) [Function]
    The mktime function is used to convert a broken-down time structure to a simple time representation. It also “normalizes” the contents of the broken-down time structure, by filling in the day of week and day of year based on the other date and time components.

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par diogene Voir le message
    Je ne vois rien d'anormal, si ce n'est que le champ année (tm_year) de la structure tm n'a pas été initialisé.

    (Vérifier tout de même que l'ouverture du fichier a été correctement faite et que entree, qui est en fait une sortie!, est différent de NULL. On doit toujours vérifier que les ouvertures de fichiers se sont bien passées)
    Oui, c'est juste que pour éviter un code trop long, j'ai enlevé les lignes de vérif. d'ouverture du fichier dans le code que j'ai posté.
    Merci pour ta remarque

    Mais donc, si je comprends bien, il faut initialiser TOUTES les variables de la structure tm pour que ça marche ?

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Bktero Voir le message
    J'ai essayé avec CodeBlocks sous XP, pas de soucis de ce genre. Tu peux utiliser le mode pas a pas de ton débogueur pour savoir quelle ligne exactement crash.


    J'ai constaté que :
    • la validité des données n'est pas vérifiée (j'ai pu entrer un mois = 21)
    • l'année s'affiche toujours égale à 25
    Merci pour ta réponse
    J'ai déjà débogué en suivant une procédure trouvée sur un autre site.

    Je ne comprends pas tellement ce qu'il me raconte (mais ça c'ets normal, je suis novice ) Par contre, il m'indique bien qu'il y a un souci avec ma fonction strftime.

    Ceci dit, dans mon compilateur à moi l'année n'est pas tjrs égale à 25 : je retrouve bien l'année saisie dans mon fichier (sur 3 caractères).

    Et je suis d'accord avec toi, on peut entrer tout et n'importe quoi comme valeur (jour = 32, etc.). C'était d'ailleurs la question que j'allais poser par la suite: comment est-ce possible ? Est-ce qu'il faut qu'on prévoit nous-mêmes des contrôles de saisie ?

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 684
    Points
    13 684
    Billets dans le blog
    1
    Par défaut
    Peux-tu nous copier-coller le résultat de ton erreur de segmentation ?

    A quel moment renseignes-tu cette date ?

    Oui, les vérifications sont à ta charge. Quand ton utilisateur entre un texte, le programme ne peut pas savoir que ça servira à être un numéro de mois ou le nombre de fleurs que tu offriras à ta grand-mère pour son anniversaire.

  8. #8
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par Mélodie_et_rythmes Voir le message
    Mais donc, si je comprends bien, il faut initialiser TOUTES les variables de la structure tm pour que ça marche ?

    Pas toutes car ce serait un peu ridicule de calculer par toi même le jour de la semaine ou le numéro de la semaine (un peu compliqué ...). Tu initialises ce dont tu as besoin (année mois jour), tu normalises avec mktime (cf la doc) et voilà

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Bktero Voir le message
    Peux-tu nous copier-coller le résultat de ton erreur de segmentation ?

    A quel moment renseignes-tu cette date ?

    Oui, les vérifications sont à ta charge. Quand ton utilisateur entre un texte, le programme ne peut pas savoir que ça servira à être un numéro de mois ou le nombre de fleurs que tu offriras à ta grand-mère pour son anniversaire.
    Elle n'est plus de ce monde (pas trop apprécié la "blague").

    Toujours est-il que je me posais la question parce que dans la doc concernant la structure tm, on trouve que :

    int tm_sec seconds [0,61]
    int tm_min minutes [0,59]
    int tm_hour hour [0,23]
    int tm_mday day of month [1,31]
    int tm_mon month of year [0,11]
    int tm_year years since 1900
    int tm_wday day of week [0,6] (Sunday = 0)
    int tm_yday day of year [0,365]
    int tm_isdst daylight savings flag

    C'est pour cela que je me suis permise de penser que si on rentrait une valeur en dehors des valeurs de l'intervalle, le système râlait.

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Pas toutes car ce serait un peu ridicule de calculer par toi même le jour de la semaine ou le numéro de la semaine (un peu compliqué ...). Tu initialises ce dont tu as besoin (année mois jour), tu normalises avec mktime (cf la doc) et voilà
    Merci pour ta réponse .
    Je vais tester ta proposition et je reviens vers toi.

  11. #11
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par Mélodie_et_rythmes Voir le message
    Merci pour ta réponse .
    Je vais tester ta proposition et je reviens vers toi.
    En fait l'idéal serait de récupérer un struct tm bien rempli via time puis localtime, de modifier ce struct tm, le normaliser via mktime et créer ta chaine via strftime.

  12. #12
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par kwariz Voir le message
    En fait l'idéal serait de récupérer un struct tm bien rempli via time puis localtime, de modifier ce struct tm, le normaliser via mktime et créer ta chaine via strftime.
    Hum... Là j'avoue tu m'as perdue .
    Pour les deux derniers points, pas de soucis.
    Par contre pour le premier, celui relatif à time, pourrais-tu expliquer davantage s'il te plaît ?
    Comment utiliser time pour récupérer les données saisies par l'utilisateur ? Tu peux me donner un exemple de bout de code ?

  13. #13
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Tu commences avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    time_t aujourdhui;
     
    time(&aujourdhui);
    Tu récupères un time_t qui correspond à ... aujourd'hui
    Tu transformes ensuite ton time_t en struct tm (cette dernière sera correctement initialisée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct tm* ptm;
     
    ptm = localtime(&aujourdhui);
    Tu te retrouves avec un struct tm correctement initialisé (y compris suivant l'implémentation la timezone ou d'autres infos que tu peux avoir du mal à initialiser).

    Tu modifies ton struct tm comme tu as envie, et tu le normalises avec mktime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ptm->tm_mon=mois-1;
    ptm->tm_mday=jour;
    ....
    mktime(ptm);
    Normalement après tout ça tu devrais avoir un struct tm correct. Il faut bien évidemment vérifier si tout se déroule bien (time ne renvoie pas -1, localtime ne renvoie pas NULL, mktime ne renvoie pas -1, etc ...)

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Tu commences avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    time_t aujourdhui;
     
    time(&aujourdhui);
    Tu récupères un time_t qui correspond à ... aujourd'hui
    Tu transformes ensuite ton time_t en struct tm (cette dernière sera correctement initialisée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct tm* ptm;
     
    ptm = localtime(&aujourdhui);
    Tu te retrouves avec un struct tm correctement initialisé (y compris suivant l'implémentation la timezone ou d'autres infos que tu peux avoir du mal à initialiser).

    Tu modifies ton struct tm comme tu as envie, et tu le normalises avec mktime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ptm->tm_mon=mois-1;
    ptm->tm_mday=jour;
    ....
    mktime(ptm);
    Normalement après tout ça tu devrais avoir un struct tm correct. Il faut bien évidemment vérifier si tout se déroule bien (time ne renvoie pas -1, localtime ne renvoie pas NULL, mktime ne renvoie pas -1, etc ...)
    Ah d'accord. Merci !!

    Mais je repose tout de même ma question, on peut utiliser time avec des données saisies par l'utilisateur ? Cmment ?

  15. #15
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par Mélodie_et_rythmes Voir le message
    Ah d'accord. Merci !!

    Mais je repose tout de même ma question, on peut utiliser time avec des données saisies par l'utilisateur ? Cmment ?
    ???
    On ne peut pas !, time ne fait que récupérer un time_t représentant la date au moment de l'appel.

    Tu peux créer un time_t à partir d'un struct tm avec mktime, struct tm préalablement rempli avec les données utilisateur.

    time_t time (time t *result) [Function]
    The time function returns the current calendar time as a value of type time_t. If the argument result is not a null pointer, the calendar time value is also stored in *result. If the current calendar time is not available, the value (time_t)(-1) is returned.

  16. #16
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par kwariz Voir le message
    ???
    On ne peut pas !, time ne fait que récupérer un time_t représentant la date au moment de l'appel.
    On est d'accord. Parce que j'avais posé la question dans le post d'avant et ta réponse faisait croire que c'était possible .

    Merci beaucoup.

  17. #17
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    De rien, mais attention quand je dis que mktime normalise cela ne signifie pas qu'il checke si la date est valide. Par exemple, si tu entres le 32 avril la date normalisée deviendra le 2 mai (=30 avril +2j ... c'est pratique pour les calculs de dates).
    Si tu veux vérifier que la date entrée est valide :

    * soit tu implémentes toi même l'algo (pas si compliqué finalement)
    * soit tu crées un struct tm, tu normalises et s'il n'y a pas eu d'erreur et si jour==jour normalisé et mois==mois normalisé et annee=annee normalisée alors la date était valide.

  18. #18
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 483
    Points : 13 684
    Points
    13 684
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mélodie_et_rythmes Voir le message
    Elle n'est plus de ce monde (pas trop apprécié la "blague").

    Toujours est-il que je me posais la question parce que dans la doc concernant la structure tm, on trouve que :

    int tm_sec seconds [0,61]
    int tm_min minutes [0,59]
    int tm_hour hour [0,23]
    int tm_mday day of month [1,31]
    int tm_mon month of year [0,11]
    int tm_year years since 1900
    int tm_wday day of week [0,6] (Sunday = 0)
    int tm_yday day of year [0,365]
    int tm_isdst daylight savings flag

    C'est pour cela que je me suis permise de penser que si on rentrait une valeur en dehors des valeurs de l'intervalle, le système râlait.
    C'était pas censé être une blague, juste trouver un cas exotique d'utilisation de variables..... Je suis mal tombé, désolé !


    Pour ce qui est de la structure, voici un extrait de time.h :
    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
    struct tm
    {
      int tm_sec;			/* Seconds.	[0-60] (1 leap second) */
      int tm_min;			/* Minutes.	[0-59] */
      int tm_hour;			/* Hours.	[0-23] */
      int tm_mday;			/* Day.		[1-31] */
      int tm_mon;			/* Month.	[0-11] */
      int tm_year;			/* Year	- 1900.  */
      int tm_wday;			/* Day of week.	[0-6] */
      int tm_yday;			/* Days in year.[0-365]	*/
      int tm_isdst;			/* DST.		[-1/0/1]*/
     
    #ifdef	__USE_BSD
      long int tm_gmtoff;		/* Seconds east of UTC.  */
      __const char *tm_zone;	/* Timezone abbreviation.  */
    #else
      long int __tm_gmtoff;		/* Seconds east of UTC.  */
      __const char *__tm_zone;	/* Timezone abbreviation.  */
    #endif
    };
    Les plages "autorisées" pour les champs sont indicatives. Les champs significatifs dans ton code sont de type int, l'intervalle des valeurs possibles sans que le programme ne râle est donc vaste.

    Que ce passe t-il quand les nombres renseignés dépassent l'intervalle "logique" (13 vs [1;12] pour les mois par ex.) ? Ce seront les fonctions utilisant la structure qui décident quoi faire. Exemple avec mktime :

    La fonction mktime() convertit la date timeptr exprimée sous forme struct tm en une date locale sous forme time_t. La fonction ignore les valeurs transmises des membres tm_wday et tm_yday de la structure, et les recalcule en utilisant les autres membres. Si des membres de la structure débordent de l'intervalle autorisé, ils seront corrigés (par exemple le 40 Octobre devient le 9 Novembre)
    EDIT : devancé par kwariz :o

  19. #19
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Bktero Voir le message
    C'était pas censé être une blague, juste trouver un cas exotique d'utilisation de variables..... Je suis mal tombé, désolé !
    Pas de souci.

    Merci pour l'explication détaillée et pertinente .
    Quant à l'erreur de segmentation que j'ai, dès que je repasse sous Linux, je vous envoie le message d'erreur détaillé.

  20. #20
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par kwariz Voir le message
    De rien, mais attention quand je dis que mktime normalise cela ne signifie pas qu'il checke si la date est valide. Par exemple, si tu entres le 32 avril la date normalisée deviendra le 2 mai (=30 avril +2j ... c'est pratique pour les calculs de dates).
    Si tu veux vérifier que la date entrée est valide :

    * soit tu implémentes toi même l'algo (pas si compliqué finalement)
    * soit tu crées un struct tm, tu normalises et s'il n'y a pas eu d'erreur et si jour==jour normalisé et mois==mois normalisé et annee=annee normalisée alors la date était valide.
    Je prends note.
    Je vais tester cela et je reviens vers toi .

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/04/2012, 13h18
  2. Réponses: 6
    Dernier message: 30/12/2011, 23h14
  3. Réponses: 3
    Dernier message: 12/04/2010, 14h54
  4. Réponses: 21
    Dernier message: 08/01/2010, 17h15
  5. Réponses: 6
    Dernier message: 16/12/2009, 21h40

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