>

아래와 같은 코드가 있습니다. 100 일 후의 현재 날짜와 날짜를 보여줍니다. 그러나 결과가 동일한 것으로 나타났습니다. 그래서 구조 또는 변수의 주소가 동일하다고 생각했습니다.

나는 "%p" 를 넣어  변수 nowlater lnowtnow  맨 아래의 결과는 lnow 의 구조 포인터를 보여줍니다.  그리고 tnow  둘 다 02B51AA0  변수 later 동안  그리고 now  주소가 다릅니다. 이제 lnow = localtime(&later) 를 움직이면  첫 번째 switch 문 다음에 다른 위치로 변경 한 다음 변경 사항을 해결하면 완벽하게 작동합니다. 왜 이런 일이 발생했는지 설명해 주시겠습니까?

#include <stdio.h>
#include <time.h>
struct tm* tnow;
struct tm* lnow;
int main(void) 
{
    time_t now = time(NULL);
    time_t later = now + 100*24*3600;
    printf("%p\t%p\n", &now, &later);
    lnow = localtime(&later);
    tnow = localtime(&now);
    printf("%p\t%p\n", lnow, tnow);
    printf("%d.%d.%d\t", tnow->tm_year+1900, tnow->tm_mon+1, tnow->tm_mday);
    switch (tnow->tm_wday)
    {
        case 0: puts("SUNDAY"); break;
        case 1: puts ("MONDAY"); break;
        case 2: puts("TUESDAY"); break;
        default: puts("ELSE"); break;
    }
    printf("%d.%d.%d\t", lnow->tm_year+1900, lnow->tm_mon+1, lnow->tm_mday);
    switch (lnow->tm_wday)
    {
        case 0: puts("SUNDAY"); break;
        case 1: puts ("MONDAY"); break;
        case 2: puts("TUESDAY"); break;
        default: puts("ELSE"); break;
    }
    return 0;
}

결과 :

0061FF2C 0061FF28 
02B51AA0 02B51AA0
2017.12.8 ELSE
2017.12.8 ELSE


  • 답변 # 1

    <올>

    now 의 주소를 왜 인쇄합니까?  그리고 later  ? 이들은 단지 time_t 입니다  주소가 쓸모 없도록 값을 설정합니다.

    localtime  매번 동일하게 내부 버퍼에 대한 포인터를 반환하므로 localtime 를 수행하려면 값을 복사해야합니다.  두 번째로.

  • 답변 # 2

    표준 C 라이브러리에는 3 가지 기능 ctime() 가 있습니다 gmtime() localtime()  모두 같은 static 를 사용  와이즈 비즈  목적. 다른 사람에게 전화를 걸거나반복 전화를 걸거나같은 객체를 재사용합니다.

    아래의 호출은 struct tm 를 반환합니다.  (변환에 실패한 경우) 또는같은객체에 대한 포인터입니다. 와이즈 비즈  통화 할 때마다 개체가 덮어 쓰기 될 수 있습니다.

    와이즈 비즈
    NULL
    
    

    결과를 ​​유지하려면 반환 된 포인터가 참조하는 개체를 복사하십시오. 오류 검사도 좋은 생각입니다.

    struct tm
    
    

    Execution of any of the functions that return a pointer to one of these object types may overwrite the information in any object of the same type pointed to by the value returned from any previous call to any of them ... C11dr §7.27.3 1

  • 이전 반응 네이티브에서 양방향 무한 ScrellView 구현
  • 다음 .htaccess - htaccess로 PHP filephp? id = dynamic_id를 파일/id로 대체