如何在c中获取时间戳

Vis*_*Lal 4 c

我想获取登录c的时间戳.我写了一个函数来获取时间戳.但是当我返回变量时,我得到了不同的价值.

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char* get_timestamp(){
   time_t rawtime;
   struct tm * timeinfo;
   char buffer[16];
   time (&rawtime);
   timeinfo = localtime (&rawtime);
   strftime (buffer,16,"%G%m%d%H%M%S",timeinfo);
   puts(buffer);
   return buffer; 
}

int main() 
{
   puts(get_timestamp());
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

20130315204815
Ir?0315204815
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮忙...谢谢.

小智 6

buffer[16]是一个本地数组,它在char* get_timestamp()函数结束时停止存在.然后返回一个指向不存在的数组的指针.


Sha*_*our 5

您正在返回指向堆栈变量的指针,因此在函数返回后无效:

 char buffer[16];
Run Code Online (Sandbox Code Playgroud)

将在函数堆栈中分配.当您返回时,堆栈被清理并且buffer不再有效.只需极少的更改,这可能是一个更好的功能签名:

void get_timestamp( char *buffer, size_t buffLen  )
Run Code Online (Sandbox Code Playgroud)

假设您buffer在调用前已正确分配空间get_timestamp.

  • 这样的任何函数也应该接受缓冲区大小,因为核心函数(`strftime()`)需要知道缓冲区大小以防止溢出. (2认同)