time_t et localtime : assignment from incompatible pointer type

time_t et localtime : assignment from incompatible pointer type - C - Programmation

Marsh Posté le 26-10-2005 à 16:01:46    

Citation :

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
 
 
extern time_t time (time_t *__timer) __THROW;
extern struct tm *localtime (__const time_t *__timer) __THROW;
 
int TOIHM(int Contexte)
{
 FILE *fp = fopen("/var/log/journallog.ini", "r+" );
 time_t timestamp;
 struct tm
 {
  int tm_sec; /* secondes */
  int tm_min; /* minutes ( 0 -> 59 ) */
  int tm_hour; /* heure (0 -> 23 ) */
  int tm_mday; /* jour du mois (1 -> 31) */
  int tm_mon; /* mois ( 0 -> 11 ) */
  int tm_year; /* annee ( 1970 -> présent ) */
  int tm_wday; /* jour de la semaine ( di:0 -> sa:6 ) */
  int tm_yday; /* jour de l'année (1/1:0 -> 31/12:364) */
  int tm_isdst; /* lié à 'daylight saving time*/
 };
 
 struct tm *t;  //pointeur sur la structure
 
 
 const char *NomJourSemaine[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
 const char *NomMois[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug","Sep", "Oct", "Nov", "Dec"};
 
 
 //Contrôle de l'ouverture du fichier
 if ( fp == NULL )
 {
  //printf("impossible d'ouvrir le fichier journallog.ini" );
  return 0;
 }
 
 //On se place à la fin du fichier
 fseek(fp,0,SEEK_END);
 
 //Lecture de la date et de l'heure
 timestamp = time (NULL);
 t = localtime(&timestamp);
 
 //Ecriture de l'évènement
 fprintf(fp,"\n%s %s %02d %04d\t%02d:%02d:%02d\t\tTime Out IHM %d\n",NomJourSemaine[t->tm_wday],NomMois[t->tm_mon], t->tm_mday, 1900+t->tm_year, t->tm_hour, t->tm_min, t->tm_sec, Contexte);
 fclose(fp);
 return 1;
}


 
à la compile, j'ai un warning : assignment from incompatible pointer type à la ligne t = localtime(&timestamp);
 
quelqu'un peut m'aider car je sèche un peu...

Reply

Marsh Posté le 26-10-2005 à 16:01:46   

Reply

Marsh Posté le 26-10-2005 à 16:31:19    

bipeuh a écrit :

Citation :

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
 
extern time_t time (time_t *__timer) __THROW;
extern struct tm *localtime (__const time_t *__timer) __THROW;


Pourquoi déclarer des fonctions qui sont sûrement déjà déclarées dans <sys/time.h>"
 
 

bipeuh a écrit :

Citation :


int TOIHM(int Contexte)
{
 FILE *fp = fopen("/var/log/journallog.ini", "r+" );
 time_t timestamp;
 struct tm
 {
  int tm_sec; /* secondes */
  int tm_min; /* minutes ( 0 -> 59 ) */
  int tm_hour; /* heure (0 -> 23 ) */
  int tm_mday; /* jour du mois (1 -> 31) */
  int tm_mon; /* mois ( 0 -> 11 ) */
  int tm_year; /* annee ( 1970 -> présent ) */
  int tm_wday; /* jour de la semaine ( di:0 -> sa:6 ) */
  int tm_yday; /* jour de l'année (1/1:0 -> 31/12:364) */
  int tm_isdst; /* lié à 'daylight saving time*/
 };


Pourquoi redéfinir "struct tm" alors qu'elle doit probablement être déjà définie dans <sys/time.h> ???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 26-10-2005 à 16:42:56    

pour les fonctions c'est pour éviter le warning à la compile...
 
pour la structure, je n'ai pas le choix : erreur à la compil dereferencing pointer to incomplete type

Reply

Marsh Posté le 26-10-2005 à 19:25:37    

si ça warn c'est tu inclues pas ce qu'il faut. le warning final le confirme.

Reply

Marsh Posté le 26-10-2005 à 20:47:32    

Sve@r a écrit :

Pourquoi déclarer des fonctions qui sont sûrement déjà déclarées dans <sys/time.h>"


 
time.h  [:aloy]  
 

Taz a écrit :

si ça warn c'est tu inclues pas ce qu'il faut. le warning final le confirme.


 
+1.
 
struct tm, time() et autres localtime() sont définis dans time.h, pas dans sys/time.h.

Reply

Marsh Posté le 27-10-2005 à 11:09:28    

j'ai changé mon include sys/time.h par time.h et ça marche nickel
merci pour le tuyau :sol:  
 
au passage, c'est quoi la différence fondamentale entre les deux? :??:

Reply

Marsh Posté le 27-10-2005 à 11:25:48    

ba c'est pas le même fichier

Reply

Marsh Posté le 27-10-2005 à 12:11:08    

et sinon?

Reply

Marsh Posté le 27-10-2005 à 12:24:02    

- c'est quoi la difference entre string.h et stdlib.h
- bah c'est pas le même fichier
- et sinon ?
 
 
time.h est l'include standard, sys/time.h doit etre utilisé en interne par ta plateforme, ou permet de faire du spécifique.

Message cité 1 fois
Message édité par blackgoddess le 27-10-2005 à 12:25:21

---------------
-( BlackGoddess )-
Reply

Marsh Posté le 27-10-2005 à 15:02:14    

blackgoddess a écrit :

- c'est quoi la difference entre string.h et stdlib.h
- bah c'est pas le même fichier
- et sinon ?
 
 
time.h est l'include standard, sys/time.h doit etre utilisé en interne par ta plateforme, ou permet de faire du spécifique.


 
 :jap:

Reply

Marsh Posté le 27-10-2005 à 15:02:14   

Reply

Marsh Posté le 31-10-2005 à 01:53:07    

Sve@r a écrit :

Pourquoi déclarer des fonctions qui sont sûrement déjà déclarées dans <sys/time.h>"


Non. Elles sont sûrement déclarées dans <time.h>

Citation :

Pourquoi redéfinir "struct tm" alors qu'elle doit probablement être déjà définie dans <sys/time.h> ???

Non. Elle est sûrement déclarée dans <time.h>


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 31-10-2005 à 11:47:22    

Emmanuel Delahaye a écrit :

Non. Elles sont sûrement déclarées dans <time.h>

Citation :

Pourquoi redéfinir "struct tm" alors qu'elle doit probablement être déjà définie dans <sys/time.h> ???

Non. Elle est sûrement déclarée dans <time.h>


J'ai répondu assez vite sans contrôler le détail des include de ce code.
L'idée était de dire qu'il est inutile de redéfinir des choses déjà définies dans les include du pgm. Evidemment ce n'était pas les bons include mais le fond est bon...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed