2014-10-14 10 views
1

다른 날짜와 함께 유효한 time_t 변수 (time1, time2)가 있다고 가정합니다.print struct tm with c

struct tm *time1_info = localtime(&time1); 
struct tm *time2_info = localtime(&time2); 

나는이 같은 시간 1과 TIME2 변수의 달을 인쇄하려고 할 때 :

내가 만들

printf("Time1 month %i and time2 month %i\n", time1_info->tm_mon, time2_info->tm_mon); 

그것은 나에게 time1time2개월 값을 제공하지만, 나는 알고있다 확실히 그들은 서로 다르다. time1의 달 4와 time2의 달이 7 예를 들어, 그것은 인쇄 :

Time1 month 7 and time2 month 7 
왜이 일을한다

?

+2

'time1'과'time2'는 어떻게 초기화합니까? – Mureinik

+0

같은 달에 시간 있습니까? –

+0

'tm_year','tm_mon' 및'tm_day'의 모든 값을 출력하여 테스트하십시오. – user1336087

답변

2

localtime 함수는 정적 개체에 대한 포인터를 반환하고 다시 호출하면 데이터를 덮어 쓰고 같은 포인터를 반환 할 수 있습니다. 반환 된 두 포인터의 값을 확인하면 같은 위치를 가리키는 것을 볼 수 있습니다.

당신은 다시 localtime를 호출하기 전에 반환 된 포인터에서 필요한 데이터를 취해야한다 :

일부 시스템

항상 같은 저장 장치를 사용하는 대신 데이터를 저장할 위치를 지정할 수있는 localtime_r 기능을 가지고, 그러나 이것은 표준 C 함수가 아닙니다. C11 표준은 동일한 기능을하는 선택적으로 지원되는 함수 localtime_s을 추가합니다.