c-time 函数 returns 奇怪的值
c-time function returns strange values
我正在使用 C 语言的代码,它使用以下命令从服务器获取时间:
(这是一个非常简短的版本,代码的其他部分和函数使用time、ftime和localtime函数来获取时间)。
struct tm *stiempo;
long ltiempo;
FILE * arch2;
int main()
{
print_error_time();
}
void print_error_time()
{
time (<iempo);
stiempo = localtime (<iempo);
fprintf (arch2, "%02.2ld/%02.2ld/%02.2ld, \t %02.2ld:%02.2ld:%02.2ld", stiempo->tm_mday, (stiempo->tm_mon + 1), (stiempo->tm_year + 1900), stiempo->tm_hour, stiempo->tm_min, stiempo->tm_sec);
}
有时它工作得很好,但有时,当时间被打印到文件中时,我得到这样的东西:
21/08/2018, 15:48:7956003943165722682
21/08/2018, 15:50:7956003943165722667
21/08/2018, 15:51:7956003943165722649
有谁知道是什么导致了这种行为,或者是什么影响了使它们成为 return 这些值的时间函数?
来自localtime:
Broken-down time is stored in the structure tm which is defined in <time.h> as follows:
struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
所有 tm
结构成员都是 int
类型,您在 fprintf()
中为它们使用格式说明符 %ld
。相反,您应该使用 %d
格式说明符。
来自 C 标准#7.21.6.1p9
9 If a conversion specification is invalid, the behavior is undefined.282) If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.
我正在使用 C 语言的代码,它使用以下命令从服务器获取时间:
(这是一个非常简短的版本,代码的其他部分和函数使用time、ftime和localtime函数来获取时间)。
struct tm *stiempo;
long ltiempo;
FILE * arch2;
int main()
{
print_error_time();
}
void print_error_time()
{
time (<iempo);
stiempo = localtime (<iempo);
fprintf (arch2, "%02.2ld/%02.2ld/%02.2ld, \t %02.2ld:%02.2ld:%02.2ld", stiempo->tm_mday, (stiempo->tm_mon + 1), (stiempo->tm_year + 1900), stiempo->tm_hour, stiempo->tm_min, stiempo->tm_sec);
}
有时它工作得很好,但有时,当时间被打印到文件中时,我得到这样的东西:
21/08/2018, 15:48:7956003943165722682
21/08/2018, 15:50:7956003943165722667
21/08/2018, 15:51:7956003943165722649
有谁知道是什么导致了这种行为,或者是什么影响了使它们成为 return 这些值的时间函数?
来自localtime:
Broken-down time is stored in the structure tm which is defined in <time.h> as follows:
struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
所有 tm
结构成员都是 int
类型,您在 fprintf()
中为它们使用格式说明符 %ld
。相反,您应该使用 %d
格式说明符。
来自 C 标准#7.21.6.1p9
9 If a conversion specification is invalid, the behavior is undefined.282) If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.