代码
#include <stdio.h>
#include <windows.h>
#include <time.h>
char* GetCurrentTimeStr()
{
time_t timep;
struct tm *p;
time(&timep);
p = localtime(&timep); // 取得当地时间
char buf[80];
sprintf(buf, "%d-%02d-%02d %02d:%02d:%02d", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
return buf;
}
// 子线程函数
DWORD WINAPI ThreadFun(LPVOID pM)
{
int i = 0;
for(i = 0; i < 10; i++)
{
char* nowStr = GetCurrentTimeStr();
printf(nowStr);
printf("\n");
Sleep(1000);
}
return 0;
}
int main()
{
HANDLE handle = CreateThread(NULL, 0, ThreadFun, NULL, 0, NULL);
WaitForSingleObject(handle, INFINITE);
return 0;
}
问题
第一行没有输出时间,为什么呢?
GetCurrentTimeStr函数中的buf是一个局部变量,函数返回后,就销毁了,之后用nowStr访问属于未定义行为。