glibc ctime() の仕組みについて質問があります。
私のスニペットに従います:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main (int argc,char** argv)
{
int ret=EXIT_SUCCESS;
time_t tm1;
time_t tm2;
tm1 = time(NULL);
tm2 = tm1 + 60; // 60 seconds later
puts("1st method-------");
printf("tm1 = %stm2 = %s",ctime(&tm1),ctime(&tm2));
puts("2nd method-------");
printf("tm1 = %s",ctime(&tm1));
printf("tm2 = %s",ctime(&tm2));
return(ret);
}
私が得た:
1st method-------
tm1 = Sat Jan 14 01:13:28 2012
tm2 = Sat Jan 14 01:13:28 2012
2nd method-------
tm1 = Sat Jan 14 01:13:28 2012
tm2 = Sat Jan 14 01:14:28 2012
ご覧のとおり、最初の方法では両方の tm が同じ値を持っていますが、これは正しくありません。2番目の方法では、正しい値が得られました。ctime() はこれらの文字列を静的バッファーに入れることを知っています。それを上書きするには、ctime() を連続して呼び出す必要があります。
Q: 1stメソッドで連呼しないの?
返信ありがとうございます。