Как получить доступ к полям временной структуры - PullRequest
4 голосов
/ 27 октября 2010

Я пытаюсь напечатать значения в переменной 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 ]

7 голосов
/ 27 октября 2010

Потому что cur - указатель. Используйте

struct timeval cur;
do_gettimeofday(&cur);

В Linux do_gettimeofday() требует, чтобы пользователь предварительно выделил место. НЕ передавайте указатель, который ни на что не указывает! Вы можете использовать malloc(), но вам лучше всего передать адрес чего-либо в стеке.

3 голосов
/ 27 октября 2010

Вам нужно использовать оператор ->, а не затем.оператор при доступе к полям.Вот так: cur->tv_sec.

Также вам нужно выделить временную структуру.В данный момент вы передаете случайный указатель на функцию gettimeofday ().

struct timeval cur;
gettimeofday(&cur);
printf("%ld.%ld", cur.tv_sec, cur.tv_nsec);
2 голосов
/ 27 октября 2010

Переменная cur является указателем типа timeval. Вам нужно иметь переменную времени и передать ее адрес функции. Что-то вроде:

struct timeval cur;
do_gettimeofday(&cur);

Вам также нужно

#include<linux/time.h>

который имеет определение struct timeval и объявление функции do_gettimeofday.

В качестве альтернативы вы можете использовать функцию gettimeofday из sys/time.h.

Рабочая ссылка

1 голос
/ 15 июля 2014

Вам нужно включить sys / time.h вместо time.h, структура timeval определяется в /usr/include/sys/time.h, а не в /usr/include/time.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...