Comment accéder aux champs d’une structure temporelle

J’essaie d’imprimer les valeurs dans une variable struct timeval comme suit:

 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; } 

Je continue à avoir cette erreur:

  demande de membre 'tv_sec' dans quelque chose qui ne soit pas une structure ou une union.  
 demande de membre 'tv_usec' dans quelque chose qui n'est pas une structure ou une union. 

Comment puis-je réparer cela?

Parce que cur est un pointeur. Utilisation

 struct timeval cur; do_gettimeofday(&cur); 

Sous Linux, do_gettimeofday() nécessite que l’utilisateur affecte au préalable l’espace. Ne passez PAS un pointeur qui ne pointe pas vers rien! Vous pouvez utiliser malloc() , mais votre meilleur pari est simplement de passer l’adresse de quelque chose sur la stack.

Vous devez utiliser l’opérateur -> plutôt qu’alors. opérateur lors de l’access aux champs. Comme si: cur->tv_sec .

Vous devez également avoir la structure temporelle allouée. Pour le moment, vous passez un pointeur aléatoire à la fonction gettimeofday ().

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

La variable cur est un pointeur de type timeval. Vous devez avoir une variable timeval et transmettre son adresse à la fonction. Quelque chose comme:

 struct timeval cur; do_gettimeofday(&cur); 

Tu as aussi besoin

 #include 

qui a la définition de la structure timeval et la déclaration de la fonction do_gettimeofday .

Vous pouvez également utiliser la fonction gettimeofday de sys/time.h

Lien de travail

Vous devez inclure sys / time.h au lieu de time.h, struct timeval est défini dans /usr/include/sys/time.h et non dans /usr/include/time.h.