如何访问时间结构的字段

时间:2010-10-27 04:14:56

标签: c linux

我正在尝试在struct timeval变量中打印值,如下所示:

int main()  
{  

    struct timeval *cur;  
    do_gettimeofday(cur);  
    printf("Here is the time of day: %ld %ld", cur.tv_sec, cur.tv_usec);  

    return 0;  
}  

我一直收到这个错误:

request for member 'tv_sec' in something not a structure or union.  
request for member 'tv_usec' in something not a structure or union.

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:7)

因为cur是一个指针。使用

struct timeval cur;
do_gettimeofday(&cur);

在Linux中,do_gettimeofday()要求用户预先分配空间。不要只是传递一个没有指向任何东西的指针!您可以使用malloc(),但最好的办法就是传递堆栈中某些内容的地址。

答案 1 :(得分:3)

你需要使用 - >操作员而不是那时。访问字段时的运算符。像这样:cur->tv_sec

您还需要分配timeval结构。目前,您正在向函数gettimeofday()传递一个随机指针。

struct timeval cur;
gettimeofday(&cur);
printf("%ld.%ld", cur.tv_sec, cur.tv_nsec);

答案 2 :(得分:2)

变量cur是timeval类型的指针。您需要有一个timeval 变量并将其地址传递给该函数。类似的东西:

struct timeval cur;
do_gettimeofday(&cur);

您还需要

#include<linux/time.h>

具有struct timeval的定义和函数do_gettimeofday的声明。

或者,您可以使用gettimeofday中的sys/time.h功能。

Working link

答案 3 :(得分:1)

您需要包含sys / time.h而不是time.h,struct timeval在/usr/include/sys/time.h中定义,而不在/usr/include/time.h中定义。