gpt4 book ai didi

c - 如何使用 clock_gettime

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:25 24 4
gpt4 key购买 nike

我正在尝试使用 clock_gettime 函数,但无法弄清楚所需的 header 是什么(或者如果这不是 header 的问题,我做错了什么)。这是我的代码:

#include <stdio.h>
#include <unistd.h> /*for CLOCK_REALTIME? */
#include <time.h>

#define NANO_TO_MILLI(N) ((N)/ 1000000)


struct TimeStruct
{
time_t sec;
time_t nano;
};

typedef struct TimeStruct TimeStruct;

void getTime (char* _timeStr);

int main()
{
char* time;
getTime(time);
printf("%s\n", time);

return 0;
}


void getTime (char* _timeStr)
{
time_t milli;
TimeStruct *curTime;
struct tm* info;

clock_gettime(CLOCK_REALTIME, curTime);
milli = NANO_TO_MILLI(curTime-> m_nano);

info = localtime(&(curTime-> m_sec));
sprintf(_timeStr, "%d-%d-%d %d:%d:%d.%d", 1900 + info->tm_year, info->tm_mon, info->tm_mday, info->tm_hour, info->tm_min, info->tm_sec, (int)milli);

}

我收到以下错误:

implicit declaration of function clock_gettime

CLOCK_REALTIME undeclared

我错过了什么?

我正在使用带有 ansi 和 pedantic 标志的 gcc (linux) 进行编译

最佳答案

当您使用 -ansi 进行编译时,一些 POSIX 标准函数将变得不可用。要访问它们,您需要使用 -std=gnu99 进行编译。这为您提供了 C99 以及 POSIX 和 GNU 扩展。

除此之外,clock_gettime 需要一个指向 struct timespec 的指针,但您提供的是自定义类型。摆脱自定义类型并使用标准类型。

此外,您传递给 clock_gettime 的指针未初始化。此函数需要此参数指向 struct timespec 的实例。同样,该函数将写入未初始化指针具有的任何地址。这会调用 undefined behavior .

与其创建指向任何地方的指针,不如创建一个结构实例并传入其地址。

void getTime (char* _timeStr)
{
time_t milli;
struct timespec curTime;
struct tm* info;

clock_gettime(CLOCK_REALTIME, &curTime);
milli = NANO_TO_MILLI(curTime.tv_usec);

info = localtime(&curTime.tv_sec);
sprintf(_timeStr, "%d-%d-%d %d:%d:%d.%d", 1900 + info->tm_year, info->tm_mon, info->tm_mday, info->tm_hour, info->tm_min, info->tm_sec, (int)milli);

}

您还在 main 中写入一个未初始化的指针。使用足够大的 char 数组来存储字符串。此外,使用 time 以外的名称,因为它掩盖了系统功能的相同名称。

int main()
{
char timeStr[50];
getTime(timeStr);
printf("%s\n", timeStr);

return 0;
}

关于c - 如何使用 clock_gettime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45763679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com