Bonjour,
J'ai réalisé une fontion qui découpe une date au format YYYY-MM-DDTHH:MM:SS.sss et range les éléments dans une structure tm. Cette fonction marche, elle est codée comme suit:


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
struct tm *fDateT_To_Struct(char *strdate) {
 
 static struct tm returndate;
 sscanf(strdate,"%4d-%2d-%2dT%2d:%2d:%2d.%3d",&(returndate.tm_year)
				             ,&(returndate.tm_mon)
				             ,&(returndate.tm_mday)
					,&(returndate.tm_hour)
					,&(returndate.tm_min)
				    	,&(returndate.tm_sec)
				             ,&(returndate.tm_isdst));
	returndate.tm_wday = 0;
  	returndate.tm_yday = 0;
 
	return &returndate ;
}
Maintenant, je souhaite inclure un code de retour d'erreur RetCode à ma fonction. J'ai modifié ma fonction comme suit:

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
RetCode fDateT_To_Struct(char *strdate, struct tm *st_dateStruct) {
 
	RetCode retCode;
	int i=0; 
	static struct tm returndate;
 
	i = sscanf(strdate,"%4d-%2d-%2dT%2d:%2d:%2d.%3d"
                                                                       ,&(returndate.tm_year)
				                    ,&(returndate.tm_mon)
				                    ,&(returndate.tm_mday)
					       ,&(returndate.tm_hour)
					       ,&(returndate.tm_min)
				    	       ,&(returndate.tm_sec)
				                   ,&(returndate.tm_isdst));
	returndate.tm_wday = 0;
  	returndate.tm_yday = 0;
	st_dateStruct = &returndate;
 
	if (i<0) goto error;
	else goto fin;
 
error:
	retCode = NOK;
fin:
	retCode = OK;
 
return(retCode);
}
Mais lorsqu'un j'appelle ma fonction, cela ne marche plus!
(bout de code du main

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
struct tm *pt_Str;
char  carac[25]; 
RetCode retcode; /*RetCode type prédéfini: accepte OK ou NOK*/
 
strcpy(carac, "2002-11-03T23:45:01.556");
 
retCode = fDateT_To_Struct(carac, pt_Str);
printf("pt_Str-> tm_year: %d\n",pt_Str->tm_year); /*par exemple*/
Il y a une erreur à l'exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
signal SEGV (no mapping at the fault address) in main at line 111 in file "mon_fichier.c"
  111                   printf("pt_Str-> tm_year: %d\n",pt_Str->tm_year);
Je ne maîtrise pas bien les pointeurs de structure. Quelqu'un aurait-t-il une idée?
Merci beaucoup
Sandra